Events — JavaScript

Coba bayangin halaman web tanpa interaksi: gak bisa diklik, gak bisa di-scroll, gak bisa diketik. Itu web tanpa events. Event = aksi yang terjadi di halaman —…

Event adalah kejadian di halaman: tombol diklik, huruf diketik, form dikirim. JavaScript bisa menunggu kejadian itu, lalu menjalankan sebuah fungsi tepat saat kejadiannya datang. Alatnya addEventListener, artinya "pasang pendengar".

🧪 Tebakan cepat: fungsi yang kamu kasih ke addEventListener jalan kapan, waktu halaman dimuat atau waktu tombolnya diklik? Tebak dulu, jawabannya ada di bagian "Pasang listener di tombol".

Pasang listener di tombol

Halamannya punya <button>Klik Saya</button>. Kodenya:

const button = document.querySelector("button");

button.addEventListener("click", (e) => {
  console.log("click:", e.target.textContent);
});

Waktu halaman dimuat, console masih kosong. Klik tombolnya, console mencetak click: Klik Saya. Klik lagi, tercetak lagi. Jadi jawaban tebakannya: listener gak jalan waktu halaman dimuat, dia menunggu sampai tombolnya diklik.

Ubah halaman di dalam listener

Halamannya punya tombol dan <p id="pesan">Belum dibayar</p>:

const tombol = document.querySelector("button");
const pesan = document.querySelector("#pesan");

tombol.addEventListener("click", () => {
  pesan.textContent = "Lunas";
});

Sebelum diklik, paragrafnya tetap Belum dibayar. Sesudah diklik, jadi Lunas. textContent adalah teks di dalam elemen, dan mengisinya mengganti teks lama.

Patokannya: kode di luar listener jalan sekali, waktu halaman dimuat. Kode di dalam listener jalan nanti, tiap kali event-nya datang. Kalau baris pesan.textContent = "Lunas" ditaruh di luar, teksnya sudah berubah sebelum ada yang ngeklik.

Baca ketikan dengan event input

const input = document.querySelector("input");
const sapaan = document.querySelector("#sapaan");

input.addEventListener("input", () => {
  sapaan.textContent = "Halo, " + input.value;
});

Ketik Ani, paragrafnya berubah tiga kali: Halo, A, Halo, An, Halo, Ani. Ada juga event "change", tapi dia cuma jalan sekali, waktu kamu selesai mengetik lalu klik di luar kolom.

Event lain, dan membatalkan aksi bawaan

Nama event ditulis huruf kecil, tanpa on: "click" (diklik), "input" (diketik), "change" (selesai diubah), "submit" (form dikirim), "keydown" (tombol keyboard ditekan).

Sebagian event punya aksi bawaan browser. Form yang dikirim, misalnya, bikin halaman dimuat ulang. e.preventDefault() membatalkan aksi bawaan itu:

const form = document.querySelector("form");

form.addEventListener("submit", (e) => {
  e.preventDefault();
  console.log("Dikirim, halamannya gak dimuat ulang");
});

Melepas listener

removeEventListener butuh fungsi yang sama persis dengan yang dipasang, jadi kasih fungsinya nama dulu:

const tombol = document.querySelector("button");

function sapa() {
  console.log("Halo!");
}

tombol.addEventListener("click", sapa);
tombol.removeEventListener("click", sapa);

sapa ditulis tanpa (), karena yang dikirim fungsinya, bukan hasilnya. Fungsi tanpa nama, () => { ... }, gak bisa dilepas begini: menulis ulang isinya tetap bikin fungsi baru.

⚠️ Jebakan yang sering ketemu

TL;DR: Event adalah kejadian di halaman. elemen.addEventListener("click", fungsi) menjalankan fungsi itu tiap kali event-nya terjadi, bukan waktu halaman dimuat, jadi perubahan halaman ditulis di dalam listener. Event "input" jalan tiap ketikan, dan isi kolomnya ada di input.value. e.preventDefault() membatalkan aksi bawaan browser, dan removeEventListener butuh fungsi yang sama persis dengan yang dipasang.

Yang akan kamu pelajari