TutorialsJavaScriptEvents
JavaScript

Events

Events are signals that something happened — a user clicked, typed, scrolled, or the page finished loading. You respond to events using event listeners.

const btn = document.querySelector("#my-btn");

// ── Basic click handler ─────────────────────────────────────────────
btn.addEventListener("click", function(event) {
  console.log("Button clicked!");
  console.log(event.target);      // element that was clicked
  console.log(event.currentTarget); // element the listener is on
});

// Arrow function shorthand
btn.addEventListener("click", (e) => {
  e.preventDefault();    // stop default behavior (form submit, link nav)
  e.stopPropagation();   // stop event bubbling to parent elements
});

// ── Common event types ──────────────────────────────────────────────
element.addEventListener("click",       handler); // click
input.addEventListener("input",         handler); // every keystroke
input.addEventListener("change",        handler); // value changed + focus left
input.addEventListener("focus",         handler); // element focused
input.addEventListener("blur",          handler); // element lost focus
form.addEventListener("submit",         handler); // form submission
document.addEventListener("keydown",    handler); // key pressed
document.addEventListener("keyup",      handler); // key released
window.addEventListener("resize",       handler); // window resized
window.addEventListener("scroll",       handler); // page scrolled
document.addEventListener("DOMContentLoaded", handler); // DOM ready

// ── Event Delegation ────────────────────────────────────────────────
// Listen on the parent — catches events from all children.
// More efficient than adding listeners to every child.
document.querySelector("ul").addEventListener("click", (e) => {
  if (e.target.tagName === "LI") {
    e.target.classList.toggle("done");
    console.log("Toggled:", e.target.textContent);
  }
});

// ── Removing event listeners ────────────────────────────────────────
// You MUST use a named function reference (not an anonymous arrow)
function handleClick(e) { console.log("clicked"); }
btn.addEventListener("click", handleClick);
btn.removeEventListener("click", handleClick); // removes the listener

// ── One-time listener ───────────────────────────────────────────────
btn.addEventListener("click", handler, { once: true }); // auto-removes after first fire
💡

Event delegation is a performance pattern: instead of adding 100 listeners to 100 list items, add ONE listener to the parent <ul> and check e.target to know which item was clicked. This also works for dynamically added elements.

Watch & Learn

A recommended video to watch alongside this chapter.

More “Events” videos on YouTube