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 — k

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 — klik mouse, tekan keyboard, scroll, resize window. JavaScript bisa "denger" event-event ini lewat event listener, terus reaksi sesuai logika kamu. Tanpa event, JavaScript cuma jalanin kode satu kali pas halaman load. Dengan event, JavaScript jadi responsive — bereaksi sesuai apa yang user lakuin.

🤔 Pola event-driven. Konsep ini namanya "event-driven programming" — bahasa modern (JavaScript, Python async, Swift) semuanya pake. Beda dari "imperative" yang tulis perintah berurutan, event-driven nungguin sinyal terus reaksi. Cocok banget buat UI yang sifatnya menunggu interaksi user.

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

tombol.addEventListener("click", function() {
  console.log("Tombol diklik!");
});

Event yang sering digunakan:

🎭 Analogi sehari-hari

Event = bel pintu rumah. JavaScript = kamu yang lagi rebahan di kamar. addEventListener = "kalau bel bunyi, aku lari ke pintu." Kamu tidak nungguin di depan pintu terus — JS tidak block, dia tunggu sambil ngerjain hal lain.

Browser yang panggil callback kamu pas event terjadi.

⚠️ Jebakan yang sering ditemui

🎯 addEventListener vs onclick vs inline onclick= — pilih yang mana?

  • Modern best practice (production) → el.addEventListener("click", fn) (multiple handlers, removable)
  • Quick prototypeel.onclick = fn (cuma satu handler, terakhir menang)
  • Inline HTML (<button onclick="doStuff()">) → AVOID (HTML+JS tercampur, susah refactor, CSP unfriendly)
  • React/Vue/Svelte<button onClick={fn}> (framework handle binding)

Patokan: kalau perlu PASS multiple handlers atau remove later → addEventListener. Kalau cuma satu handler quick → onclick property. JANGAN inline onclick="" di HTML production — anti-pattern lama.

TL;DR: Events = aksi yang terjadi (klik, ketik, scroll, resize). addEventListener("click", fn) modern best practice (multiple handlers + removable). Event object kasih info: event.target (yang triggered), event.preventDefault() (block default browser action), event.stopPropagation() (stop bubbling). Common events: click, input, submit, keydown, scroll. Pakai {passive: true} untuk scroll/touch (smoother). Hindari inline onclick="" (CSP unfriendly).

Yang akan kamu pelajari