Mencegah submit form secara default pada JavaScript dilakukan dengan menggunakan metode event.preventDefault() di dalam fungsi event listener saat event submit dipicu. Langkah ini krusial untuk menjalankan validasi sisi klien, menghentikan muat ulang halaman (page reload), atau mengirim data secara asynchronous menggunakan fetch().
Tanpa pencegahan ini, browser secara otomatis akan melakukan POST data dan me-refresh halaman, yang menyebabkan hilangnya state aplikasi atau kegagalan proses validasi kustom.
Metode Utama Pencegahan Submit Form
Berikut adalah tabel perbandingan metode yang umum digunakan untuk mengontrol perilaku submit form dalam pengembangan web modern.
| Metode | Sintaks Utama | Kasus Penggunaan Ideal |
|---|---|---|
| preventDefault() | e.preventDefault() |
Validasi kustom & AJAX submit |
| Disable Button | btn.disabled = true |
Mencegah double submission (klik ganda) |
| Return False | return false; (Inline HTML) |
Skrip lama / Vanilla JS inline event |
Contoh Implementasi Kode JavaScript
Penerapan standar industri saat ini memanfaatkan addEventListener dikombinasikan dengan preventDefault() untuk menangkap data form secara aman.
// HTML
// <form id="myForm">
// <input type="text" id="username" required>
// <button type="submit">Kirim</button>
// </form>
const form = document.getElementById('myForm');
form.addEventListener('submit', function(event) {
// Mencegah form melakukan submit bawaan browser
event.preventDefault();
const username = document.getElementById('username').value;
// Validasi sederhana
if (username.trim() === "") {
alert("Nama pengguna tidak boleh kosong!");
return;
}
// Proses data lebih lanjut (misal: AJAX / Fetch API)
console.log("Form berhasil dicegah dan siap dikirim via AJAX:", username);
});
Mencegah Double Click / Submit Ganda
Selain mencegah reload halaman, seringkali pengembang perlu menghentikan pengguna yang menekan tombol kirim berulang kali. Hal ini dapat diatasi dengan menonaktifkan tombol submit sesaat setelah event submit tertangkap.
const form = document.getElementById('myForm');
const submitBtn = document.getElementById('submitBtn');
form.addEventListener('submit', function(e) {
e.preventDefault();
// Nonaktifkan tombol untuk mencegah klik ganda
submitBtn.disabled = true;
submitBtn.textContent = 'Memproses...';
// Simulasi pengiriman data async
setTimeout(() => {
alert('Data terkirim!');
submitBtn.disabled = false;
submitBtn.textContent = 'Kirim';
}, 2000);
});
Troubleshooting Lapangan
Jika kode preventDefault() tidak berjalan sebagaimana mestinya, periksa beberapa hal berikut:
- Pastikan listener dipasang pada elemen
<form>, bukan pada tombol<button type="submit">(kecuali menangani eventclickpada tombol, meski menangkap eventsubmitpada form jauh lebih dianjurkan). - Periksa apakah ada skrip pihak ketiga atau framework lain yang melakukan event bubbling dan mereset status event.
- Pastikan parameter event (biasanya dinamai
eatauevent) didefinisikan dengan benar di dalam fungsi callback.