Halaman yang berjalan baik bisa tetap menyimpan masalah jika kode jQuery-nya ditulis sekadar agar jalan. Saat fitur bertambah, memperbaiki satu tombol malah merusak bagian lain karena semua logika bercampur di satu tempat. Cara menulis kode jQuery yang rapi mencegah hal itu: file terstruktur, selector disimpan sekali, dan event dipasang pada elemen yang tepat.
Mulai dari satu file JavaScript, pisahkan tanggung jawabnya
Banyak proyek kecil menaruh semua skrip di dalam tag script pada halaman. Ini cepat, tapi menyulitkan pelacakan saat jumlah baris melewati ratusan. Pindahkan kode ke file terpisah, misalnya main.js, lalu muat sekali di akhir halaman.
Di dalam file itu, bagi perilaku menjadi blok-blok pendek. Satu blok menangani navigasi, blok lain menangani form, blok ketiga menangani tabel. Setiap blok dibungkus fungsi dan dipanggil saat dokumen siap.
$(function () {
initNav();
initContactForm();
initSearchTable();
});
function initNav() {
// perilaku menu
}
function initContactForm() {
// validasi dan kirim form
}
Pola ini membuat kamu tahu di mana harus mencari ketika tombol menu bermasalah, tanpa membaca seluruh skrip dari atas. Jika kode mulai melempar error yang tidak jelas, langkah pelacakan di tips debugging kode jQuery bisa membantumu menemukan sumbernya lebih cepat.
Simpan selector dalam variabel, jangan mengulang
Setiap pemanggilan $('.daftar-item') memaksa browser menelusuri DOM lagi. Pada halaman dengan banyak elemen, pengulangan seperti ini memperlambat respons dan menyulitkan perubahan kelas. Simpan hasilnya sekali di variabel.
var $list = $('.daftar-item');untuk kumpulan elemen.var $form = $('#contact-form');untuk satu elemen form.- Awali nama variabel dengan
$agar terlihat jelas bahwa isinya objek jQuery, bukan elemen DOM biasa.
Gaya penamaan ini juga mencegah kekeliruan saat kamu perlu mengakses properti DOM, misalnya $tombol[0].disabled. Tanpa penanda, kamu bisa lupa bahwa objek jQuery bukan elemen asli.
Pasang event sekali, tidak di setiap iterasi
Menu dropdown berisi puluhan item yang dimuat ulang saat filter berubah. Menempelkan handler klik di dalam each() berarti handler baru dipasang setiap kali daftar digambar ulang, dan handler lama masih menempel. Akibatnya satu klik menjalankan beberapa fungsi sekaligus.
Gunakan event delegation dengan memasang handler di induk yang stabil.
$('#menu').on('click', '.menu-item', function () {
$(this).toggleClass('active');
});
Handler terpasang satu kali di #menu, dan item baru otomatis ikut menangkap klik karena event naik ke induk. Masalah event dobel yang muncul dari pemasangan berulang bisa diatasi dengan pola .off() dan .one() seperti dibahas di cara mencegah event ganda pada jQuery.
Susun rantai method dengan cara yang bisa dibaca
jQuery dirancang untuk chaining, tapi rantai panjang di satu baris melelahkan mata. Pecah per tahap logis.
$('#hasil')
.addClass('tampil')
.find('.pesan')
.text('Data berhasil dimuat')
.end()
.fadeIn(200);
Method .end() mengembalikan seleksi ke elemen sebelumnya sehingga kamu bisa lanjut mengatur #hasil. Rantai yang dipisah per baris lebih mudah dibaca saat menelusuri kesalahan, dibanding semua method bertumpuk di satu baris.
Komentari keputusan, bukan pengulangan kode
Komentar yang berbunyi // menambahkan class tidak memberi informasi apa pun karena baris di bawahnya sudah jelas. Tulis alasan di balik keputusan yang tidak terlihat dari kode.
// Delay dipakai agar animasi tidak bertumpuk saat klik cepat
var timerId = setTimeout(simpanData, 300);
Lalu kurangi komentar usang: jika fungsi diubah tapi komentarnya tidak, pembaca berikutnya akan dituntun ke arah salah. Cara paling aman adalah memberi komentar pada blok fungsi yang menjelaskan tujuannya, bukan setiap baris di dalamnya.
Cek ulang sebelum menyerahkan kode
Beberapa kebiasaan kecil berikut sering terlewat dan berdampak besar pada perawatan jangka panjang.
- Pastikan tidak ada selector yang dipanggil berulang tanpa variabel.
- Pastikan handler dipasang di induk yang tidak ikut dihapus saat konten diperbarui.
- Pastikan nama fungsi menjelaskan tindakan, misalnya
initSearchTable, bukanfungsi1. - Hapus kode mati yang sudah digantikan fungsi baru, karena ia membingungkan saat penelusuran berikutnya.
Pola-pola ini melengkapi pembahasan kesalahan umum saat menulis kode jQuery, terutama soal selector dan event yang dipasang berlebihan.
Kode jQuery yang rapi dibangun dari keputusan kecil yang konsisten: fungsi pendek dengan satu tugas, selector yang disimpan, dan event yang dipasang sekali di induk yang tepat. Dengan begitu, perubahan fitur tidak memaksa kamu membaca ulang seluruh file untuk memastikan tidak ada yang rusak.
Pertanyaan yang Sering Diajukan
Apakah kode jQuery harus selalu dibungkus dalam fungsi?
Tidak wajib, tetapi membungkus tiap perilaku dalam fungsi memudahkan pemanggilan ulang dan pengujian. Untuk skrip yang hanya berjalan sekali saat halaman dimuat, memanggil beberapa fungsi dari $(function(){}) sudah cukup membuat alurnya terbaca.
Kenapa selector yang disimpan di variabel bisa menampilkan data lama?
Variabel menyimpan referensi elemen, bukan salinan nilainya. Jika elemen dihapus lalu diganti elemen baru dengan kelas yang sama, variabel lama menunjuk ke elemen yang sudah tidak ada di halaman. Panggil ulang selector setelah daftar digambar ulang, atau gunakan event delegation agar handler tetap bekerja.
Apakah event delegation selalu lebih baik daripada handler langsung?
Event delegation dipilih ketika elemen anak bertambah atau berkurang selama halaman berjalan, misalnya item daftar hasil pencarian. Untuk elemen statis yang sudah ada saat halaman dimuat, handler langsung pada elemennya masih sederhana dan tidak menimbulkan masalah.