- Bab 7 dari 7
- 30 menit
- 1 latihan kode
- 4 soal kuis
Debugging Koneksi, DevTools, dan Praktik Terbaik
Di bab ini (7 bagian)
Tujuan bab ini
- Mengenali enam kesalahan koneksi HTML, CSS, dan JavaScript yang paling sering terjadi.
- Menerapkan separation of concerns: satu berkas, satu tugas.
- Memakai panel DevTools yang tepat untuk tiap jenis masalah.
- Mengetahui arah belajar berikutnya setelah koneksi dasar dikuasai.
Enam kesalahan koneksi tersering
Hampir semua keluhan "kodeku nggak jalan" padahal kodenya kelihatan benar berasal dari daftar ini. Kuncinya: koneksi itu seperti alamat. Kalau satu huruf saja meleset, paketnya tidak sampai, dan browser jarang protes keras.
| Gejala | Penyebab | Cara cek |
|---|---|---|
| Halaman polos tanpa gaya | Path CSS salah | Network: style.css berstatus 404 |
Cannot read properties of null | Script jalan sebelum elemen ada | Console, lalu lihat posisi <script> |
| Gaya tidak kena satu elemen | Typo selector atau lupa titik/pagar | Styles: aturan tidak muncul untuk elemen itu |
querySelector hasilnya null | Selector di JS tidak cocok dengan HTML | Console: jalankan selector-nya langsung |
| Class terpasang tapi tampilan tetap | Nama class di CSS beda dengan di JS | Elements: class ada; Styles: aturan tidak ada |
| Perubahan tidak muncul | Cache browser masih menyimpan berkas lama | Sources: isi berkas masih versi lama |
1. Path CSS salah. href="style.css" padahal berkasnya ada di css/style.css. Path relatif dihitung dari lokasi berkas HTML, bukan dari root proyek. Lupa rel="stylesheet" juga bikin CSS tidak dipakai, meski path-nya benar.
2. Script sebelum elemen ada, tanpa defer. Sudah kita bedah di bab cara browser merakit halaman: parser belum sampai ke elemen, jadi pilihannya null. Solusinya defer atau taruh script sebelum </body>.
3. Typo selector. .tomboll, #Judul, atau tombol { } tanpa titik. CSS tidak pernah error; aturan yang tidak cocok cuma diam-diam diabaikan. Ingat: titik untuk class, pagar untuk id, tanpa awalan untuk tag. Nama class dan id case-sensitive, jadi .Tombol tidak sama dengan class="tombol".
4. querySelector mengembalikan null. Bedanya dengan CSS, JavaScript langsung error di baris berikutnya:
Pesan error-nya menunjuk baris addEventListener, padahal kesalahannya di baris atas. Biasakan membaca satu baris ke atas.
5. Class di CSS beda dengan di JS. CSS menulis .aktif, JS memanggil classList.add("active"). Di panel Elements, class active benar-benar terpasang, jadi kelihatannya JS benar. Masalahnya, tidak ada aturan CSS untuk active.
6. Cache browser. Kamu sudah mengedit style.css, tapi browser masih memakai salinan lama. Coba hard reload (Ctrl + Shift + R), atau centang "Disable cache" di tab Network selama DevTools terbuka.
Contoh kecil yang menggabungkan kesalahan nomor 3 dan 5:
Hasilnya: tombol tetap abu-abu bawaan browser karena .Tombol tidak cocok dengan tombol. Dan kalau JS memasang class aktif, outline emas juga tidak muncul karena CSS menunggu active.
Separation of concerns: satu berkas, satu tugas
Prinsip ini sederhana: HTML untuk struktur, CSS untuk tampilan, JavaScript untuk perilaku. Kedengarannya teori, tapi efeknya terasa saat debugging. Kalau warna salah, kamu tahu harus buka style.css. Kalau klik tidak bereaksi, buka script.js.
Dua kebiasaan yang melanggar prinsip ini:
- Inline style (
style="...") punya specificity sangat tinggi. Aturan distyle.cssjadi kalah dan kamu bingung kenapa CSS-mu "tidak jalan". onclickdi HTML mencampur perilaku ke struktur, cuma bisa memanggil fungsi global, dan sering diblokir Content Security Policy di situs produksi. PakaiaddEventListenerdi berkas JS.
Begitu juga di JS: lebih baik classList.toggle("aktif") daripada mengatur element.style.color, element.style.background, dan seterusnya. Keputusan tampilan tetap di CSS, JS cukup memilih kondisi.
Daftar periksa sebelum bilang halaman selesai: berkas CSS dan JS berstatus 200 di Network, Console bersih tanpa pesan merah, setiap class di CSS benar-benar dipakai, nama berkas huruf kecil tanpa spasi, dan halaman tetap terbaca walau JavaScript dimatikan.
DevTools: alat bedah koneksi
Buka dengan F12 atau Ctrl + Shift + I (Cmd + Option + I di Mac).
- Elements menampilkan DOM yang sebenarnya, termasuk perubahan dari JavaScript. Berbeda dengan "View Source" yang hanya menampilkan HTML asli dari server. Pakai ini untuk cek apakah
data-temaatau class benar-benar terpasang. - Styles (di samping Elements) menampilkan aturan CSS yang cocok dengan elemen terpilih. Aturan yang kalah dicoret, jadi kamu bisa lihat siapa yang menimpa siapa. Tab Computed menampilkan nilai akhir, misalnya
rgb(27, 32, 48)dan32px. - Console menampilkan error JS beserta nama berkas dan nomor barisnya. Kamu juga bisa menjalankan
document.querySelector(".tombol")langsung di sini untuk mengetes selector. - Network mencatat setiap berkas yang diminta. Refresh halaman dengan panel terbuka, lalu cari
style.cssdanscript.js. Status 200 berarti berhasil, 404 berarti path salah. - Sources menampilkan berkas yang benar-benar dimuat browser. Klik nomor baris untuk memasang breakpoint; saat kode sampai di situ, eksekusi berhenti dan kamu bisa melihat isi setiap variabel. Kata kunci
debugger;di kode punya efek yang sama.
Kebiasaan bagus: buka DevTools setiap kali menulis kode, bukan hanya saat ada masalah.
Langkah berikutnya
Setelah koneksi dasar ini lancar, arah belajarnya kira-kira begini:
- Perkuat dasar dan tata letak: Flexbox, Grid, desain responsif (lihat kelas HTML5 dan CSS3).
- JavaScript modern: modul,
async/await, danfetch(lihat kelas JavaScript). - Alat bantu: Git dan GitHub, npm, bundler, Prettier, ESLint.
- Tailwind CSS: menulis gaya lewat class utilitas seperti
bg-white p-4. Koneksinya tetap sama: HTML memakai class, CSS yang dihasilkan Tailwind memberi gayanya. - Framework seperti React: kamu menulis komponen, React yang mengurus DOM. Konsep event, class, dan state di balik layar tetap sama dengan yang kamu pelajari di sini.
Saran praktis: setiap selesai satu tahap, bangun ulang satu halaman favoritmu dari nol.
Kesalahan umum
- Langsung mengubah kode tanpa membuka DevTools. Tebak-tebakan memakan waktu lebih lama daripada membaca Console dan Network.
- Mengira CSS akan memberi pesan error. CSS diam saja; cek panel Styles.
- Memperbaiki baris yang ditunjuk error tanpa melihat baris di atasnya, padahal
null-nya berasal dari selector sebelumnya. - Inline style untuk "memperbaiki cepat", yang akhirnya menimpa semua aturan di berkas CSS.
Rangkuman
- HTML adalah pusatnya.
<link>memanggil CSS dan<script>memanggil JavaScript; path dan posisi harus benar. - Penanda adalah alamatnya.
id,class, dandata-*harus ditulis persis sama di ketiga berkas. - JavaScript adalah penggeraknya. Lewat DOM dan event, JS memasang class atau atribut, sementara keputusan tampilan tetap di CSS.
- Enam kesalahan tersering bisa dilacak dengan Elements, Styles, Console, Network, dan Sources.
Slide 23 sampai 27 dari deck HTML CSS JavaScript. Penjelasan lengkapnya ada di Bacaan.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: Perbaiki koneksi halaman pendaftaran
Halaman ini penuh kesalahan koneksi. Perbaiki tanpa mengubah tujuan halamannya:
- CSS memakai nama class yang tidak sama dengan HTML. Samakan supaya tombol
.tombolberlatar#e34f26dan panel.panel.aktiftampil (display: block). - Hapus atribut
styledanonclickdari tombol. Pasang event klik lewataddEventListenerdi JS. - Selector di JS salah sehingga menghasilkan
null. Perbaiki. - Saat tombol diklik, panel
.panelmendapat classaktif, dan#pesanmenampilkanHalo,diikuti isi#nama. PakaitextContent, bukaninnerHTML, supaya input pengguna tidak dibaca sebagai HTML.
Cek pemahaman
1Console menampilkan `Cannot read properties of null (reading 'addEventListener')`. Apa penyebab paling mungkin?
2Status 404 untuk `style.css` di panel Network berarti ada selector yang salah ketik di dalam berkas CSS.
3Panel mana yang paling cepat menunjukkan aturan CSS mana yang menang dan mana yang dicoret untuk satu elemen?
4Warna latar apa yang dimiliki tombol ini?
<style> .Tombol { background: #e34f26; } .button { background: green; } .tombol.active { outline: 3px solid gold; } </style> <button class="tombol">Simpan</button>
