Cek elemen sebelum pasang addEventListener. Error Cannot read properties of null (reading 'addEventListener') artinya variabel yang kamu panggil bukan elemen DOM, melainkan null karena getElementById atau querySelector tidak menemukan apa pun. Perbaikannya: samakan selector dengan HTML, pastikan DOM sudah siap, lalu tambah guard if (el).
Penyebab Cannot Read Properties Of Null di addEventListener
Browser melempar TypeError ini saat kode memanggil .addEventListener pada nilai null. Selector tidak menghasilkan node elemen.
- Selector salah ketik: ID di JS
btn-kirimtapi di HTMLbtnKirim, lupa tanda#untuk ID atau.untuk class, salah huruf besar kecil. - Script jalan sebelum DOM siap: tag
scriptdiheadtanpadefermengeksekusi JS padahal tombol belum dirender. - Elemen ada di halaman lain: JS dipakai bersama di banyak halaman, tapi tombol cuma ada di satu halaman sehingga hasilnya
nulldi halaman lain. - Elemen dibuat dinamis: tombol muncul setelah fetch data, setelah klik tertentu, atau dirender framework, jadi belum ada saat listener dipasang.
Tabel Cek Cepat Berdasarkan Kondisi Error
Lihat kondisi di bawah ini sebelum mengubah kode.
| Error/Kondisi | Penyebab | Solusi |
|---|---|---|
| Selector tidak ketemu | ID atau class beda dengan HTML | Cocokkan string selector dengan atribut HTML |
| DOM belum dimuat | Script di head tanpa penunggu DOM | Pindah script ke akhir body atau pakai DOMContentLoaded |
| Elemen dinamis | Node baru dibuat setelah listener dipasang | Pasang listener ulang atau pakai event delegation |
Perbaiki addEventListener Null dengan Urutan yang Benar
Ikut urutan ini agar akar masalah hilang, bukan cuma disembunyikan.
- Buka HTML dan pastikan selector sama persis, termasuk tanda
#dan huruf besar kecil. - Pindahkan
scriptke akhirbodyatau bungkus kode denganDOMContentLoaded. - Tambah cek
nullsebelum memanggiladdEventListener.
// SALAH: tombol belum tentu ada
const btn = document.querySelector("#btn-kirim");
btn.addEventListener("click", kirimData);
// BENAR
document.addEventListener("DOMContentLoaded", () => {
const btn = document.querySelector("#btn-kirim");
if (!btn) return;
btn.addEventListener("click", kirimData);
});
Kode benar menunggu DOM siap lalu menghentikan proses bila tombol tidak ditemukan. Untuk daftar tombol yang dibuat belakangan, pasang satu listener di induknya lalu periksa event.target. Itu pola event delegation.
Cegah Error Terulang pada Project Berikutnya
- Selalu verifikasi hasil
querySelectortidaknullsebelum dipakai. - Samakan penamaan ID di HTML dan JS, idealnya salin tempel agar tidak salah ketik.
- Tangani konten dinamis dengan delegation, bukan memasang listener satu per satu tiap render.
- Jangan hanya mengandalkan
btn?.addEventListener(...). Kode berhenti error, tapi tombol tetap tidak berfungsi bila penyebab selector atau timing belum diperbaiki.
FAQ
Kenapa addEventListener error padahal ID sudah benar?
Umumnya script berjalan sebelum elemen dirender, jadi pindahkan script ke akhir body atau pakai DOMContentLoaded.
Apakah script harus selalu di akhir body?
Tidak wajib, script di head tetap aman bila memakai defer atau menunggu DOMContentLoaded.
Bagaimana menangani tombol yang dibuat dinamis?
Pasang listener di elemen induk yang statis lalu filter event.target dengan closest().