Junior
Was ist 'Hoisting' im Kontext von JavaScript?
sobes.tech KI
Antwort von AI
Это механизм, при котором, когда на элементе происходит событие, обработчик сначала срабатывает на самом элементе, затем на его родителе, потом на родителе родителя и так далее, вверх по DOM-дереву.
Представьте, что у вас есть вложенные друг в друга элементы: <div> внутри него <p>, внутри <p> находится <span>. Если вы кликнете по <span>, то первым сработает обработчик клика на <span>, затем на <p>, а потом на <div>.
// Пример всплытия событий
const div = document.querySelector('div');
const p = document.querySelector('p');
const span = document.querySelector('span');
div.addEventListener('click', function() {
console.log('Клик на div');
});
p.addEventListener('click', function() {
console.log('Клик на p');
});
span.addEventListener('click', function() {
console.log('Клик на span'); // Сработает первым
});
Это поведение полезно для реализации делегирования событий, когда один обработчик устанавливается на родительском элементе для обработки событий от всех его потомков.
// Пример использования всплытия для делегирования событий
const ul = document.querySelector('ul');
ul.addEventListener('click', function(event) {
// Проверяем, является ли целевой элемент listItem
if (event.target.tagName === 'LI') {
console.log('Кликнули по элементу списка:', event.target.textContent);
}
});
Всплытие можно остановить с помощью метода stopPropagation() объекта события.
// Пример остановки всплытия
const button = document.querySelector('button');
const container = document.querySelector('.container');
container.addEventListener('click', function() {
console.log('Клик на контейнер');
});
button.addEventListener('click', function(event) {
console.log('Клик на кнопку');
event.stopPropagation(); // Останавливаем всплытие дальше
});