menengahdomeventMenengah3 mnt baca

Event Object

Menggali informasi dari event: target, type, preventDefault, dan properti penting lainnya.

Setiap event membawa data

Saat event terjadi, browser membuat object berisi detail kejadian itu dan mengirimnya ke handler sebagai argumen pertama. Biasa dinamai e, evt, atau event.

javascript
let tombol = document.querySelector("button");

tombol.addEventListener("click", (e) => {
  console.log(e.type);   // "click"
  console.log(e.target); // elemen yang diklik
});

e.target: siapa yang memicu?

target adalah elemen yang sebenarnya memicu event. Ini penting terutama untuk event delegasi (modul berikutnya):

javascript
document.querySelector("ul").addEventListener("click", (e) => {
  console.log("Yang diklik: " + e.target.textContent);
});

Bedakan dengan e.currentTarget yang selalu merujuk ke elemen tempat listener dipasang.

e.preventDefault: batalkan aksi bawaan

Beberapa elemen punya perilaku bawaan: link pindah halaman, form me-reload halaman. preventDefault membatalkannya:

javascript
let form = document.querySelector("form");
form.addEventListener("submit", (e) => {
  e.preventDefault(); // jangan reload halaman
  console.log("Form diproses via JavaScript");
});

let link = document.querySelector("a");
link.addEventListener("click", (e) => {
  e.preventDefault(); // jangan pindah halaman
  console.log("Link diklik tapi ditahan");
});

Ini fondasi SPA dan validasi form custom: cegah aksi bawaan, tangani sendiri dengan JavaScript.

Info spesifik per event

javascript
// keyboard: tombol apa yang ditekan?
document.addEventListener("keydown", (e) => {
  console.log(e.key); // "Enter", "a", "Escape"
});

// mouse: posisi kursor
document.addEventListener("click", (e) => {
  console.log(e.clientX, e.clientY); // koordinat di viewport
});

Properti e.key jauh lebih mudah dibaca daripada kode angka lama seperti e.keyCode yang sudah deprecated.

Catatan teknis: e.target bisa berupa elemen anak di dalam elemen yang dipasang listener. Misalnya listener di div berisi span, klik span membuat e.target = span. Kalau kamu butuh elemen tempat listener dipasang, pakai e.currentTarget. Untuk delegasi yang aman, kombinasikan e.target dengan closest().

Studi kasus: cegah submit kosong

Manfaatkan event object untuk validasi sebelum submit:

javascript
let form = document.querySelector("#form-komentar");

form.addEventListener("submit", (e) => {
  let teks = document.querySelector("#komentar").value.trim();

  if (teks.length < 5) {
    e.preventDefault(); // batalkan submit!
    document.querySelector("#pesan-error").textContent =
      "Komentar minimal 5 karakter (sekarang: " + teks.length + ")";
    return;
  }
  console.log("Terkirim: " + teks);
});

Tanpa preventDefault, form akan reload halaman dan pesan error tidak sempat terbaca. Dengan preventDefault, kamu memegang kendali penuh: validasi dulu, kirim hanya kalau lolos. Ini fondasi semua form interaktif modern.

Kesimpulan

Event object menjawab tiga pertanyaan: apa yang terjadi (type), siapa pemicunya (target), dan detail tambahannya (key, clientX, dll). Kuasai preventDefault karena ia gerbang menuju interaksi custom.