Form Event dan Validasi
Menangani form: event submit, input, change, membaca nilai input, dan validasi sederhana.
Form adalah gerbang data pengguna
Formulir adalah cara utama pengguna mengirim data: login, pendaftaran, pencarian. JavaScript memberi kontrol penuh atas perilaku form lewat event.
Menangani submit
let form = document.querySelector("#form-login");
form.addEventListener("submit", (e) => {
e.preventDefault(); // cegah reload halaman
let username = document.querySelector("#username").value;
let password = document.querySelector("#password").value;
console.log("Login sebagai: " + username);
// kirim ke server via fetch (modul fetch-api)
});Properti value mengambil isi input. preventDefault wajib agar halaman tidak reload dan kamu bisa memproses data sendiri.
Event input vs change
let nama = document.querySelector("#nama");
// input: jalan setiap ada perubahan (tiap ketikan)
nama.addEventListener("input", (e) => {
console.log("Diketik: " + e.target.value);
});
// change: jalan setelah selesai (blur atau Enter)
nama.addEventListener("change", (e) => {
console.log("Final: " + e.target.value);
});Event input cocok untuk live preview atau validasi real-time, change untuk konfirmasi akhir.
Validasi sederhana
form.addEventListener("submit", (e) => {
e.preventDefault();
let email = document.querySelector("#email").value.trim();
let error = document.querySelector("#error");
if (!email.includes("@")) {
error.textContent = "Email tidak valid";
return; // berhenti, jangan kirim
}
error.textContent = "";
console.log("Email valid, lanjut kirim...");
});Membaca berbagai tipe input
let checkbox = document.querySelector("#setuju");
console.log(checkbox.checked); // true/false, bukan value
let pilihan = document.querySelector('input[name="gender"]:checked');
console.log(pilihan ? pilihan.value : "belum dipilih");
let select = document.querySelector("#kota");
console.log(select.value); // option yang terpilihCheckbox memakai checked, radio memakai :checked untuk yang terpilih, select langsung value.
Catatan teknis: Validasi JavaScript hanya untuk UX, bukan keamanan. Pengguna bisa mematikan JavaScript atau mengirim request langsung. Validasi yang menentukan (apakah email unik, apakah user berhak) harus selalu diulang di server.
Studi kasus: validasi password kembar
Kasus klasik form pendaftaran, memastikan dua field password sama:
let form = document.querySelector("#form-daftar");
let pw1 = document.querySelector("#pw1");
let pw2 = document.querySelector("#pw2");
let info = document.querySelector("#info-pw");
// cek langsung saat mengetik
pw2.addEventListener("input", () => {
if (pw2.value && pw2.value !== pw1.value) {
info.textContent = "Password tidak sama!";
info.style.color = "red";
} else {
info.textContent = "";
}
});
form.addEventListener("submit", (e) => {
if (pw1.value !== pw2.value || pw1.value.length < 8) {
e.preventDefault();
info.textContent = "Periksa kembali passwordmu!";
info.style.color = "red";
}
});Validasi ganda: real-time saat mengetik untuk UX, dan saat submit sebagai jaring pengaman. Keduanya memakai logika yang sama agar konsisten.
Kesimpulan
Pola form standar: dengarkan submit, preventDefault, ambil value, validasi, lalu kirim. Kuasai pola ini karena hampir setiap aplikasi web punya minimal satu form.