Mengapa saya mendapatkan error atau Uncaught TypeError: Tidak dapat menyetel properti 'innerHTML' dari null? Saya pikir saya mengerti innerHTML dan sudah berfungsi sebelumnya.
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
<script type ="text/javascript">
what();
function what(){
document.getElementById('hello').innerHTML = 'hi';
};
</script>
</head>
<body>
<div id="hello"></div>
</body>
</html>
javascript
onload
innerhtml
Joshua W.
sumber
sumber
Pertama-tama, mari kita coba memahami akar penyebab mengapa hal itu terjadi.
Browser selalu memuat seluruh DOM HTML dari atas ke bawah. Kode JavaScript apa pun yang ditulis di dalam
script
tag (ada dihead
bagian file HTML Anda) dijalankan oleh mesin rendering browser bahkan sebelum seluruh DOM Anda (berbagai tag elemen HTML ada di dalam tag body) dimuat. Skrip yang ada dalamhead
tag mencoba mengakses elemen yang memiliki idhello
bahkan sebelum benar-benar dirender di DOM. Jadi jelas, JavaScript gagal melihat elemen dan karenanya Anda akhirnya melihat kesalahan referensi nol.Anda ingin menampilkan pesan "hai" di halaman segera setelah pengguna membuka halaman Anda untuk pertama kalinya. Jadi, Anda perlu menghubungkan kode Anda pada titik ketika Anda benar-benar yakin dengan fakta bahwa DOM telah dimuat sepenuhnya dan
hello
elemen id dapat diakses / tersedia. Ini dapat dicapai dengan dua cara:hello
elemen id Anda sudah dimuat. Anda dapat mencapainya hanya dengan memindahkan tag script setelah semua elemen DOM yaitu di bagian bawah di manabody
tag diakhiri. Karena rendering terjadi dari atas ke bawah sehingga skrip Anda dieksekusi pada akhirnya dan Anda tidak menghadapi kesalahan.<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </body> </html>
window.onload
event melalui event yang memberi Anda petunjuk bahwa browser telah selesai memuat DOM. Jadi pada saat peristiwa ini diaktifkan, Anda dapat yakin bahwa elemen Anda denganhello
id sudah dimuat di DOM dan JavaScript apa pun yang diaktifkan setelahnya yang mencoba mengakses elemen ini tidak akan gagal. Jadi Anda melakukan sesuatu seperti cuplikan kode di bawah ini. Harap perhatikan bahwa dalam kasus ini, skrip Anda berfungsi meskipun ada di bagian atas dokumen HTML Anda di dalamhead
tag.<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> <script type ="text/javascript"> window.onload = function() { what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; } </script> </head> <body> <div id="hello"></div> </body> </html>
sumber
Anda dapat memberi tahu javascript untuk melakukan tindakan "onload" ... Coba dengan ini:
<script type ="text/javascript"> window.onload = function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script>
sumber
Masukkan saja JS Anda
window.onload
window.onload = function() { what(); function what() { document.getElementById('hello').innerHTML = 'hi'; }; }
sumber
Bagian JavaScript perlu dijalankan setelah halaman dimuat, oleh karena itu disarankan untuk menempatkan skrip JavaScript di akhir tag body.
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Example</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </body> </html>
sumber
Javascript terlihat bagus. Coba jalankan setelah div dimuat. Coba jalankan hanya jika dokumen sudah siap.
$(document).ready
di jquery.sumber
window.onload
mungkin cukup tetapi ada acara lain yang tersedia juga. Lihat MDN diwindow
: developer.mozilla.org/en-US/docs/Web/API/Window<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Example</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = '<p>hi</p>'; }; </script> </body> </html>
sumber
Berikut Apakah potongan saya mencobanya. Saya harap ini akan membantu Anda.
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </body> </html>
sumber
Anda dapat mencoba menggunakan metode setTimeout untuk memastikan html Anda dimuat terlebih dahulu.
sumber
Akar penyebabnya adalah: HTML pada halaman harus dimuat sebelum kode javascript . Menyelesaikan dengan 2 cara:
1) Izinkan pemuatan HTML sebelum kode js.
<script type ="text/javascript"> window.onload = function what(){ document.getElementById('hello').innerHTML = 'hi'; } </script> //or set time out like this: <script type ="text/javascript"> setTimeout(function(){ what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; }, 50); //NOTE: 50 is milisecond. </script>
2) Pindahkan kode js di bawah kode HTML
<div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script>
sumber
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </body> </html>
sumber
Saya mengalami masalah yang sama dan ternyata kesalahan nol itu karena saya belum menyimpan html yang saya gunakan.
Jika elemen yang dirujuk belum disimpan setelah halaman dimuat adalah 'null', karena dokumen tidak memuatnya pada saat pemuatan. Menggunakan window.onload juga membantu proses debug.
Saya harap ini bermanfaat bagi Anda.
sumber
Kesalahan ini dapat muncul bahkan jika Anda memuat skrip Anda setelah render html selesai. Dalam contoh ini, kode Anda
<div id="hello"></div>
tidak memiliki nilai di dalam div. Jadi kesalahan dimunculkan, karena tidak ada nilai untuk diubah di dalamnya. Seharusnya begitu
<div id="hello">Some random text to change</div>
kemudian.
sumber
Tambahkan jquery ke
< head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
Gunakan $ document.ready () : kode dapat berada di
< head>
atau dalam file terpisah seperti main.js1) menggunakan js di file yang sama (tambahkan ini di
< head>
):<script> $( document ).ready(function() { function what(){ document.getElementById('hello').innerHTML = 'hi'; }; }); </script>
2) menggunakan beberapa file lain seperti main.js (tambahkan ini di
< head>
):<script type="text/javascript" src="/path/to/main.js" charset="utf-8"></script>
dan tambahkan kode di file main.js :)
sumber
Anda perlu berubah
div
menjadip
. Secara teknis innerHTML berarti berada di dalam<??? id=""></???>
bagian.Perubahan:
<div id="hello"></div>
ke
<p id="hello"></p>
Perbuatan:
document.getElementById('hello').innerHTML = 'hi';
akan berubah
<div id="hello"></div> into this <div id="hello">hi</div>
yang sebenarnya tidak masuk akal.
Anda juga dapat mencoba mengubah:
document.getElementById('hello').innerHTML = 'hi';
ke dalam ini
document.getElementById('hello').innerHTML='<p> hi </p> ';
untuk membuatnya berhasil.
sumber
Kesalahannya menjelaskan sendiri itu tidak mendapatkan tag HTML di mana Anda ingin mengatur Data Jadi buat tag tersedia untuk JS maka hanya Anda yang dapat mengatur Data untuk itu.
sumber
Tidak diragukan lagi, sebagian besar jawaban di sini benar, tetapi Anda juga dapat melakukan ini:
document.addEventListener('DOMContentLoaded', function what() { document.getElementById('hello').innerHTML = 'hi'; });
sumber
Ada kemungkinan penyebab berbeda seperti yang dibahas hanya ingin menambahkan ini untuk seseorang yang mungkin memiliki masalah yang sama dengan saya.
Dalam kasus saya, saya memiliki div dekat yang hilang seperti yang ditunjukkan di bawah ini
Hilangnya div dapat menyebabkan disorganisasi transversal dari anak ke induk atau induk ke anak sehingga mengakibatkan kesalahan saat Anda mencoba mengakses elemen di DOM
sumber
Biarkan DOM dimuat. Untuk melakukan sesuatu di DOM Anda harus memuatnya terlebih dahulu. Dalam kasus Anda, Anda harus memuat
<div>
tag terlebih dahulu. maka Anda memiliki sesuatu untuk dimodifikasi. jika Anda memuat js terlebih dahulu maka fungsi itu mencari AndaHTML
untuk melakukan apa yang Anda minta, tetapi saat itu AndaHTML
sedang memuat dan fungsi Anda tidak dapat menemukanHTML
. Jadi Anda bisa meletakkan script di bagian bawah halaman. di dalam<body>
tag maka fungsi tersebut dapat mengakses<div>
Karena DOM sudah dimuat saat Anda menekan skrip.sumber