Ответ вслух Junior События спрашивают часто обновлено

Как распространяются события в DOM

Вопрос

Расскажи, как событие распространяется по DOM и чем отличаются stopPropagation и preventDefault.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Событие проходит три фазы. Сначала погружение: браузер идёт от window вниз по предкам к элементу, где оно возникло.

Что должно прозвучать в ответе

  • Три фазы: погружение, цель, всплытие

  • Слушатели по умолчанию на всплытии, `capture: true` переносит на погружение

  • `target` - где возникло, `currentTarget` - где висит обработчик

  • `stopPropagation` останавливает путь по дереву, но не обработчики того же элемента

  • `preventDefault` отменяет действие браузера и на распространение не влияет

  • Не все события всплывают: `focus`, `blur`, `mouseenter`

Что могут спросить следом

  • Чем stopImmediatePropagation отличается от stopPropagation?
  • Почему злоупотреблять stopPropagation плохо?
  • Как поймать focus на родителе?

Разбор

Событие проходит три фазы. Сначала погружение: браузер идёт от window вниз по предкам к элементу, где оно возникло. Потом фаза цели. Потом всплытие обратно вверх. Обычные слушатели срабатывают на всплытии, а если передать capture: true, то на погружении. В обработчике event.target это исходный элемент, а currentTarget тот, на котором висит слушатель. stopPropagation прерывает путь события по дереву, при этом остальные слушатели того же элемента ещё выполнятся, а stopImmediatePropagation остановит и их. preventDefault совсем про другое: он отменяет действие браузера, например переход по ссылке или отправку формы, а событие при этом продолжает всплывать. Ещё важно, что всплывают не все события: focus, blur, mouseenter не всплывают, для делегирования фокуса есть focusin и focusout. И я стараюсь не злоупотреблять stopPropagation, потому что он ломает логику, которая слушает выше, например закрытие меню по клику снаружи.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме