В чем разница между stopPropagation и stopImmediatePropagation?
DOM и браузер
`stopPropagation` останавливает всплытие события к другим элементам, а `stopImmediatePropagation` дополнительно предотвращает выполнение остальных обработчиков этого же события на текущем элементе.
stopPropagation
Прерывает распространение события дальше по дереву (к родителям при всплытии), но остальные обработчики на текущем элементе выполнятся:
el.addEventListener('click', (e) => {
e.stopPropagation(); // родители не получат событие
console.log('обработчик 1');
});
el.addEventListener('click', () => {
console.log('обработчик 2'); // ВЫПОЛНИТСЯ — тот же элемент
});
parent.addEventListener('click', () => {
console.log('родитель'); // НЕ выполнится
});stopImmediatePropagation
Прерывает распространение и не даёт выполниться другим обработчикам того же события на этом же элементе:
el.addEventListener('click', (e) => {
e.stopImmediatePropagation();
console.log('обработчик 1');
});
el.addEventListener('click', () => {
console.log('обработчик 2'); // НЕ выполнится
});Главное различие
- stopPropagation — останавливает переход к другим элементам; обработчики текущего элемента работают.
- stopImmediatePropagation — плюс отменяет остальные обработчики текущего элемента.
Когда применять
- Обычно достаточно stopPropagation.
- stopImmediatePropagation — когда на элементе несколько обработчиков и нужно прервать всю цепочку (например, перехватить событие раньше сторонних библиотек).
Коротко для собеседования
stopPropagation останавливает всплытие к родителям, но остальные обработчики текущего элемента срабатывают. stopImmediatePropagation дополнительно отменяет другие обработчики того же события на этом элементе. Обычно хватает первого; второй — когда нужно прервать всю цепочку обработчиков элемента.