PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

В чем разница между 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 дополнительно отменяет другие обработчики того же события на этом элементе. Обычно хватает первого; второй — когда нужно прервать всю цепочку обработчиков элемента.

Другие вопросы раздела