Спросят с вероятностью 7%
Всплытие (или бабблинг, event bubbling) — это механизм обработки событий в веб-разработке, при котором событие, происходящее на одном элементе, сначала обрабатывается этим элементом, а затем последовательно передаётся (всплывает) вверх по дереву DOM к его родительским элементам вплоть до корневого элемента (обычно
document).Как работает всплытие событий
Когда это происходит на элементе, сначала выполняются обработчики, прикрепленные к самому элементу, затем к его родителю, потом к родителю родителя, и так далее до
document.Рассмотрим пример с вложенными элементами и обработчиками событий:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Event Bubbling</title>
</head>
<body>
<div id="parent" style="padding: 20px; background-color: lightblue;">
Parent
<div id="child" style="padding: 20px; background-color: lightcoral;">
Child
</div>
</div>
<script>
document.getElementById('parent').addEventListener('click', () => {
alert('Parent clicked!');
});
document.getElementById('child').addEventListener('click', () => {
alert('Child clicked!');
});
</script>
</body>
</html>
В этом примере, если вы кликнете на элемент
#child, вы увидите два алерта: сначала "Child clicked!", затем "Parent clicked!". Это происходит потому, что событие клика всплывает от элемента #child к его родителю #parent.Управление всплытием
Иногда нужно предотвратить всплытие события, чтобы оно не передавалось родительским элементам. Это можно сделать с помощью метода
event.stopPropagation().<script>
document.getElementById('parent').addEventListener('click', () => {
alert('Parent clicked!');
});
document.getElementById('child').addEventListener('click', (event) => {
alert('Child clicked!');
event.stopPropagation(); // предотвращает всплытие события
});
</script>
Теперь, если вы кликнете на элемент
#child, вы увидите только алерт "Child clicked!", так как всплытие события было остановлено.Захват событий
Помимо всплытия, существует другой этап обработки событий, называемый захватом (event capturing). Событие сначала идет сверху вниз от корневого элемента к цели (начиная с
document и заканчивая целевым элементом), а затем поднимается обратно вверх (всплытие).Чтобы добавить обработчик на этапе захвата, нужно передать
true в качестве третьего аргумента в addEventListener:<script>
document.getElementById('parent').addEventListener('click', () => {
alert('Parent clicked!');
}, true);
document.getElementById('child').addEventListener('click', () => {
alert('Child clicked!');
}, true);
</script>
Всплытие событий — это механизм, при котором событие сначала обрабатывается целевым элементом, а затем передается его родителям по дереву DOM. Чтобы остановить всплытие, можно использовать
event.stopPropagation().🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых