PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как остановить Bubbling после click?

Продвинутые темы

Всплытие (bubbling) после клика останавливают методом `event.stopPropagation()` в обработчике — событие не пойдёт к родительским элементам.

stopPropagation

element.addEventListener('click', (e) => {
  e.stopPropagation(); // всплытие остановлено
  // родители не получат это событие
});

Пример

child.addEventListener('click', (e) => {
  e.stopPropagation();
  console.log('child');
});
parent.addEventListener('click', () => {
  console.log('parent'); // НЕ выполнится при клике по child
});

stopImmediatePropagation

Останавливает всплытие и другие обработчики того же события на текущем элементе:

element.addEventListener('click', (e) => {
  e.stopImmediatePropagation();
});
element.addEventListener('click', () => {
  // НЕ выполнится
});

Не путать с preventDefault

  • stopPropagation — останавливает всплытие (распространение).
  • preventDefault — отменяет действие браузера (переход по ссылке, submit), но всплытие продолжается.

Осторожно

Избыточный stopPropagation ломает делегирование и глобальные обработчики (закрытие меню по клику вне). Применять точечно; часто лучше проверять event.target в родителе.

Коротко для собеседования

Всплытие после клика останавливает event.stopPropagation() в обработчике — событие не идёт к родителям. stopImmediatePropagation() дополнительно отменяет другие обработчики на этом элементе. Не путать с preventDefault (отмена действия браузера, не всплытия). Злоупотребление ломает делегирование — применять точечно.

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