Всплытие событий — это фаза распространения события в DOM, при которой событие последовательно поднимается от целевого элемента вверх по иерархии DOM-дерева к корневому элементу. Это один из трех этапов жизненного цикла события наряду с фазой захвата и целевой фазой.
<div id="grandparent">
<div id="parent">
<button id="child">Нажми меня</button>
</div>
</div>
document.getElementById('grandparent').addEventListener('click', () => {
console.log('Grandparent clicked');
});
document.getElementById('parent').addEventListener('click', () => {
console.log('Parent clicked');
});
document.getElementById('child').addEventListener('click', () => {
console.log('Child clicked');
});
При клике на кнопку вывод в консоли будет:
document.getElementById('list').addEventListener('click', (event) => {
if (event.target.tagName === 'LI') {
console.log('Clicked on item:', event.target.textContent);
}
});
event.stopPropagation(); // Останавливает всплытие
event.stopImmediatePropagation(); // + предотвращает вызов других обработчиков на текущем элементе
event.target
— исходный элемент, на котором произошло событиеevent.currentTarget
— текущий элемент, на котором срабатывает обработчик// Третий параметр определяет фазу:
element.addEventListener('click', handler); // Всплытие (по умолчанию)
element.addEventListener('click', handler, true); // Захват
Хотя Node.js не имеет DOM, концепция всплытия реализована в:
Всплытие событий — это важный механизм DOM, позволяющий обрабатывать события на разных уровнях иерархии элементов. Понимание этого механизма необходимо для эффективной работы с событиями, особенно при реализации сложной интерактивности и делегирования событий.