← Назад к вопросам
В какой момент обычно отлавливается событие
2.3 Middle🔥 111 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
В какой момент обычно отлавливается событие
В браузере события проходят через несколько фаз: захвата (capturing), целевую (target) и всплытия (bubbling). Момент отловления зависит от того, на какой фазе мы регистрируем слушатель события.
Фазы события (Event Flow)
// HTML структура
// <div id="parent">
// <button id="child">Нажми</button>
// </div>
const parent = document.getElementById('parent');
const child = document.getElementById('child');
// Фаза 1: CAPTURING (Захват) - идёт от корня вниз
parent.addEventListener('click', () => {
console.log('1. Parent CAPTURING');
}, true);
// Фаза 2: TARGET - достигает целевого элемента
child.addEventListener('click', () => {
console.log('2. Child TARGET');
});
// Фаза 3: BUBBLING (Всплытие) - идёт от элемента вверх
parent.addEventListener('click', () => {
console.log('3. Parent BUBBLING');
});
Где обычно отлавливается событие
По умолчанию addEventListener регистрирует события на фазе всплытия (bubbling):
// Это одно и то же
document.addEventListener('click', handler);
document.addEventListener('click', handler, false);
// Для захвата нужно явно указать true
document.addEventListener('click', handler, true);
Практические примеры
Пример 1: Event Delegation (Всплытие)
const list = document.getElementById('list');
list.addEventListener('click', (event) => {
if (event.target.classList.contains('delete')) {
const item = event.target.closest('li');
item?.remove();
}
});
Пример 2: Захват для перехвата (Capturing)
const form = document.querySelector('form');
form.addEventListener('focus', (event) => {
console.log('Захвачено фокусировкой на:', event.target.name);
}, true);
stopPropagation() и stopImmediatePropagation()
const button = document.querySelector('button');
button.addEventListener('click', (event) => {
event.stopPropagation();
console.log('Клик на кнопке');
});
Итоговое правило
По умолчанию событие отлавливается на фазе всплытия (bubbling). Это самый удобный и эффективный способ для большинства задач.