Pesan Cannot read properties of null (reading 'classList') atau classList undefined artinya kode Anda memanggil classList pada elemen yang nilainya null. Perbaikannya bukan sekadar tambah ?., tetapi pastikan querySelector atau getElementById benar-benar menemukan elemen sebelum classList.add(), remove(), atau toggle() dijalankan.
Penyebab ClassList Terbaca Undefined di Browser
Di browser, classList hanya ada pada Element. Jika variabelnya null, browser melempar TypeError saat runtime. Ini bukan SyntaxError atau ReferenceError, murni objek targetnya kosong.
querySelectorataugetElementByIdmengembalikannullkarena selector salah ketik.- Script berjalan sebelum DOM siap, misalnya script di
<head>tanpa defer. - Elemen dibuat dinamis lewat fetch atau tombol, tetapi kode
classListjalan lebih dulu.
Error/Kondisi | Penyebab | Solusi
Tidak bisa baca classList dari null | id atau class salah tulis | cocokkan selector dengan HTML, cek console.log(el)
Elemen ada di HTML tapi tetap null | script dieksekusi sebelum elemen dirender | pindah script ke akhir body atau pakai DOMContentLoaded
Error hanya muncul setelah data dimuat | elemen dinamis belum dibuat | jalankan kode setelah render, atau pakai event delegation
Cara Memperbaiki Error ClassList dengan Cepat
Ikuti urutan ini agar akar masalah ketemu:
1. Cetak elemennya dulu dengan console.log(modal) untuk memastikan tidak null.
2. Perbaiki selector, bedakan #modal untuk id dan .modal untuk class.
3. Pastikan script jalan setelah DOM, pindah ke bawah atau bungkus dengan DOMContentLoaded.
4. Tambah penjagaan hanya setelah penyebab jelas.
// SALAH: tombol belum tentu ada saat baris ini jalan
const btn = document.querySelector("#btnSimpan");
btn.classList.add("loading");
// BENAR
document.addEventListener("DOMContentLoaded", () => {
const btn = document.querySelector("#btnSimpan");
if (!btn) return;
btn.classList.add("loading");
});
Baris if (!btn) return; menghentikan kode bila elemen tidak ditemukan. Pendengar DOMContentLoaded memastikan HTML sudah diparsing. Optional chaining seperti btn?.classList.add() hanya membungkam error, tidak memperbaiki selector yang salah.
Cara Mencegah ClassList Error Terulang
- Validasi setiap hasil
querySelectorsebelum aksesclassList. - Samakan penulisan id dan class di HTML, CSS, dan JavaScript.
- Gunakan event delegation untuk tombol atau kartu yang dibuat dinamis.
- Pakai
textContentuntuk mengubah teks, simpaninnerHTMLhanya bila perlu markup.
Metode | Cocok Untuk | Catatan
Cek if (el) | elemen statis | paling jelas untuk debug
Optional chaining ?. | kode boleh dilewati bila elemen absen | jangan dipakai untuk menutupi typo selector
Event delegation | daftar dinamis | pasang satu listener di parent, cek event.target.closest()
FAQ
Kenapa classList undefined padahal id sudah ada?
Umumnya script jalan sebelum elemen dirender atau ada salah tulis antara #namaId dan atribut id di HTML.
Apakah optional chaining cukup untuk error ini?
Tidak, ?. hanya mencegah crash tetapi elemen tetap tidak diproses jika selector atau timing-nya salah.
Kapan memakai event delegation untuk classList?
Pakai saat elemen dibuat setelah halaman dimuat, misalnya hasil fetch, agar classList.toggle() jalan lewat parent yang selalu ada.