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