Clean β’ Professional
Event propagation defines the order in which events travel through the DOM (Document Object Model) when an event is triggered. It determines how and when event handlers are executed on nested elements.
When an event (like a click) happens on a DOM element, it doesnβt just stay there β it travels through three phases:

window / document) and travels down to the target element.document.getElementById("outer").addEventListener("click", () => {
console.log("Outer (Capturing)");
}, true); // true = capture phase
document.getElementById("button").addEventListener("click", () => {
console.log("Button (Target Phase)");
});
document.getElementById("outer").addEventListener("click", () => {
console.log("Outer (Bubbling)");
}); // default is false = bubbling phase
Example of Event Propagation
HTML:
<div id="outer">
<button id="inner">Click Me</button>
</div>
JavaScript:
document.getElementById("outer").addEventListener("click", () => {
console.log("Outer DIV");
});
document.getElementById("inner").addEventListener("click", () => {
console.log("Inner BUTTON");
});
You can stop the event from moving further up or down the DOM tree.
a) stopPropagation()
Stops the event from continuing in either direction (up or down).
inner.addEventListener("click", (e) => {
e.stopPropagation();
console.log("Inner only!");
});
b) stopImmediatePropagation()
Stops propagation and prevents other handlers on the same element from executing.
inner.addEventListener("click", (e) => {
e.stopImmediatePropagation();
console.log("This runs, others wonβt.");
});
preventDefault()
Stops the default action of an element (e.g., link navigation, form submission).
document.querySelector("a").addEventListener("click", (e) => {
e.preventDefault();
console.log("Link click prevented");
});Β