document.getElementById() mengembalikan null artinya browser tidak menemukan elemen dengan ID tersebut saat baris itu dieksekusi. Perbaikan tercepat: pindahkan <script> ke akhir <body> atau bungkus kode dengan DOMContentLoaded, lalu periksa ejaan ID. Error lanjutan seperti Cannot read properties of null adalah TypeError, bukan SyntaxError, dan muncul karena kode mengakses properti dari hasil null tersebut.
Penyebab getElementById Mengembalikan Null
Masalah ini hampir selalu soal waktu eksekusi atau selector, bukan bug browser. Konteksnya murni JavaScript browser karena memakai document.
- Script di
<head>berjalan sebelum DOM selesai diparsing, sehingga elemen target belum ada. - ID salah ketik, beda huruf besar kecil, ada spasi, atau lupa tanda kutip.
getElementById("Judul")tidak sama dengangetElementById("judul"). - Elemen dibuat dinamis lewat JavaScript atau fetch, lalu diakses sebelum proses render selesai.
- ID duplikat dalam satu halaman. Browser hanya mengambil yang pertama dan perilakunya tidak bisa diandalkan.
- Elemen berada di
iframelain atau shadow DOM, sehinggadocumentutama tidak bisa menjangkaunya langsung. - Script berjalan di konteks salah, misalnya kode browser dijalankan di Node.js yang tidak punya
document.
Tabel Diagnosis Cepat Null pada getElementById
| Error/Kondisi | Penyebab | Solusi |
|---|---|---|
| Script di head, elemen null | DOM belum dimuat | Pindah script ke akhir body atau pakai defer |
| ID yakin benar tapi null | Typo atau beda kapital | Samakan id di HTML dan JS |
| Elemen dari fetch atau template | Diakses sebelum dirender | Panggil getElementById setelah render |
| Dua elemen pakai ID sama | ID duplikat | Buat ID unik atau pakai class |
Perbaiki Urutan Script dan Pengecekan Elemen
Ikuti urutan ini agar sumber null langsung ketahuan:
1. Buka DevTools, cek console.log(document.getElementById("namaId")) dan pastikan hasilnya elemen, bukan null.
2. Samakan ejaan id="namaId" di HTML dengan string di JavaScript.
3. Pindahkan script ke akhir <body> atau tambahkan defer pada script eksternal.
4. Untuk script inline, bungkus dengan DOMContentLoaded.
5. Untuk konten dinamis, panggil getElementById setelah appendChild atau setelah fetch selesai.
// SALAH: jalan sebelum elemen ada
const title = document.getElementById("judul");
title.textContent = "Halo";
// BENAR: tunggu DOM siap + cek null
document.addEventListener("DOMContentLoaded", () => {
const title = document.getElementById("judul");
if (!title) return;
title.textContent = "Halo";
});
Pengecekan if (!title) return; menghentikan TypeError. Penanganan elemen dinamis tetap harus ditempatkan setelah fungsi render dipanggil.
Cegah Error Null Terulang di Project Berikutnya
- Selalu cek elemen sebelum pasang
addEventListeneratau ubahtextContent. - Gunakan satu pola konsisten: semua script di akhir body, atau semua pakai
defer. - Jangan pakai ID sama dua kali. Untuk daftar berulang, pakai
classdanquerySelectorAll. - Validasi ID dinamis dari data atau parameter URL sebelum dipakai sebagai argumen.
FAQ
Kenapa ID sudah benar tapi getElementById tetap null?
Kemungkinan besar script dieksekusi sebelum DOM siap atau elemen dibuat secara dinamis setelah kode berjalan.
Apakah defer dan DOMContentLoaded menyelesaikan semua kasus null?
Keduanya menyelesaikan kasus timing load awal, tetapi tidak berlaku untuk elemen fetch, iframe, atau shadow DOM.
Kapan memakai querySelector sebagai pengganti getElementById?
Pakai querySelector saat butuh selector class, atribut, atau kombinasi kompleks, bukan untuk memperbaiki ID yang salah.