<htmlstart/>

JS Events

Events let JavaScript respond to user actions like clicks, typing, and form submissions.

Adding Event Listeners

const btn = document.getElementById("my-btn");

btn.addEventListener("click", function(event) {
  console.log("Button clicked!", event);
});

// Arrow function shorthand
btn.addEventListener("click", (e) => {
  console.log("Clicked:", e.target);
});

Common Events

EventFires when
clickElement is clicked
dblclickElement is double-clicked
mouseover / mouseoutMouse enters / leaves
keydown / keyupKey pressed / released
inputInput value changes
changeInput loses focus after change
submitForm is submitted
focus / blurElement gains / loses focus
loadPage or resource fully loaded
DOMContentLoadedHTML parsed (before images load)
// Form submit — prevent page reload
const form = document.querySelector("form");
form.addEventListener("submit", (e) => {
  e.preventDefault();
  const data = new FormData(form);
  console.log(data.get("email"));
});

// Keyboard events
document.addEventListener("keydown", (e) => {
  if (e.key === "Escape") closeModal();
  if (e.ctrlKey && e.key === "s") saveDocument();
});

// Run code after DOM is ready
document.addEventListener("DOMContentLoaded", () => {
  console.log("Page ready!");
});

Event Delegation

Instead of adding listeners to each child, listen on the parent — works for dynamic elements too:

document.querySelector("ul").addEventListener("click", (e) => {
  if (e.target.tagName === "LI") {
    e.target.classList.toggle("done");
  }
});
Use addEventListener over inline onclick attributes — it keeps JavaScript separate from HTML, allows multiple listeners, and can be removed with removeEventListener.
🧩

Test Yourself

4 questions
Q1.Which method is the preferred way to attach event listeners?
Q2.What does e.preventDefault() do inside a form submit handler?
Q3.What is event delegation?
Q4.Which event fires when the HTML is fully parsed but before images load?