Baseline Widely available
Note: This feature is available in Web Workers.
The stopImmediatePropagation()
method of the Event
interface prevents other listeners of the same event from being called.
If several listeners are attached to the same element for the same event type, they are called in the order in which they were added. If stopImmediatePropagation()
is invoked during one such call, no remaining listeners will be called, either on that element or any other element.
stopImmediatePropagation()
Parameters
None.
Return valueNone (undefined
).
The example below has three buttons inside of three nested divs. Each button has three event listeners registered for click events, and each div has an event listener, also registered for click events.
stopPropagation()
in its first event handler.stopImmediatePropagation()
in its first event handler.<h2>Click on the buttons</h2>
<div>
outer div<br />
<div>
middle div<br />
<div>
inner div<br />
<button>allow propagation</button><br />
<button id="stopPropagation">stop propagation</button><br />
<button id="stopImmediatePropagation">immediate stop propagation</button>
</div>
</div>
</div>
<pre></pre>
CSS
div {
display: inline-block;
padding: 10px;
background-color: white;
border: 2px solid black;
margin: 10px;
}
button {
width: 100px;
color: #000088;
padding: 5px;
background-color: white;
border: 2px solid black;
border-radius: 30px;
margin: 5px;
}
JavaScript
const outElem = document.querySelector("pre");
/* Clear the output */
document.addEventListener(
"click",
() => {
outElem.textContent = "";
},
true,
);
/* Set event listeners for the buttons */
document.querySelectorAll("button").forEach((elem) => {
for (let i = 1; i <= 3; i++) {
elem.addEventListener("click", (evt) => {
/* Do any propagation stopping in first event handler */
if (i === 1 && elem.id) {
evt[elem.id]();
outElem.textContent += `Event handler for event 1 calling ${elem.id}()\n`;
}
outElem.textContent += `Click event ${i} processed on "${elem.textContent}" button\n`;
});
}
});
/* Set event listeners for the divs */
document
.querySelectorAll("div")
.forEach((elem) =>
elem.addEventListener(
"click",
(evt) =>
(outElem.textContent += `Click event processed on "${elem.firstChild.data.trim()}"\n`),
),
);
Result
Each click-event handler displays a status message when it is called. If you press the middle button, you will see that stopPropagation()
allows all of the event handlers registered for clicks on that button to execute but prevents execution of the click-event handlers for the divs, which would normally follow. However, if you press the bottom button, stopImmediatePropagation()
stops all propagation after the event that called it.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4