Эта ссылка дает четкое объяснение - https://www.quirksmode.org/js/events_order.html
Вы, веб-разработчик, можете выбрать, регистрировать ли обработчик событий в процессе захвата или в фазе всплытия. Это делается с помощью метода addEventListener()
, описанного на странице Расширенные модели. Если его последний аргумент равен true, обработчик событий установлен для фазы захвата, если он равен false, обработчик событий установлен для фазы пузырьков.
Предположим, вы делаете
element1.addEventListener('click',doSomething2,true)
element2.addEventListener('click',doSomething,false)
Если пользователь нажимает на элемент 2, происходит следующее:
Событие щелчка начинается на этапе захвата. Событие проверяет, есть ли у какого-либо предка элемента element2 обработчик события onclick для фазы захвата.
Событие находит один на element1. doSomething2 () выполняется.
Событие перемещается вниз к самой цели, больше не найдено обработчиков событий для фазы захвата. Событие переходит в фазу пузырьков и выполняет doSomething (), которая зарегистрирована в element2 для фазы пузырьков.
Событие снова движется вверх и проверяет, есть ли у какого-либо предка элемента цели обработчик события для фазы пузырьков. Это не так, поэтому ничего не происходит.
Обратное будет
element1.addEventListener('click',doSomething2,false)
element2.addEventListener('click',doSomething,false)
Теперь, если пользователь нажимает на элемент 2, происходит следующее:
Событие щелчка начинается на этапе захвата. Событие ищет, имеет ли какой-либо элемент-предок element2 обработчик события onclick для фазы захвата, и не находит его.
Событие движется вниз к самой цели. Событие переходит в фазу пузырьков и выполняет doSomething (), которая зарегистрирована в element2 для фазы пузырьков.
Событие снова движется вверх и проверяет, есть ли у какого-либо предка элемента цели обработчик события для фазы пузырьков.
Событие находит один на element1. Теперь doSomething2 () выполняется.
Совместимость с традиционной моделью
В браузерах, которые поддерживают W3C DOM, традиционная регистрация событий
element1.onclick = doSomething2;
рассматривается как регистрация в фазе барботирования.
Использование всплытия событий
Немногие веб-разработчики сознательно используют захват событий или всплытие. В веб-страницах, как они сделаны сегодня, просто нет необходимости допускать, чтобы пузырьковое событие обрабатывалось несколькими различными обработчиками событий. Пользователи могут запутаться в нескольких вещах, происходящих после одного щелчка мышью, и обычно вы хотите разделить свои сценарии обработки событий. Когда пользователь нажимает на элемент, что-то происходит, когда он нажимает на другой элемент, что-то еще происходит.
Конечно, это может измениться в будущем, и было бы хорошо иметь в наличии модели с прямой совместимостью. Но основное практическое использование захвата и всплытия событий сегодня - это регистрация функций по умолчанию.