Junior
Какво е моделът на събитията в браузъра?
sobes.tech AI
Отговор от AI
Метод за обработка на взаимодействията на потребителя (кликове, въвеждане, задържане с мишката) и системните събития (зареждане на страница, грешки) в уеб браузъра.
Основни концепции:
- Събитие: Действие, което се е случило.
- Обработчик на събитие: Функция, която се изпълнява при настъпване на събитието.
- Обект на събитието (Event object): Предава се на обработчика и съдържа информация за събитието (тип, елемент, координати и др.).
Стандартен поток на събитията:
- Засичане (Capturing): Събитието спуска от най-горния елемент на DOM (Window, Document) към целевия елемент. Обработчиците в този етап се активират първи.
- Фаза на целта (Target phase): Събитието достига целевия елемент, където се е случило.
- Бубъл (Bubbling): Събитието се издига от целевия елемент обратно през DOM към Window. Обработчиците в този етап се активират след фазите засичане и цел.
Добавяне на обработчици:
- HTML атрибути (
onclick,onload): Остарял начин, не се препоръчва за сложни приложения. - Свойства на DOM елементи (
element.onclick): Може да се зададе само един обработчик за всеки тип събитие за даден елемент.// Пример const button = document.querySelector('button'); button.onclick = function() { alert('Натиснат е бутон!'); }; - Метод
addEventListener: Предпочитан начин. Позволява добавяне на няколко обработчика за едно събитие и контролира фазата на обработка (засичане или бубъл).// Пример const button = document.querySelector('button'); button.addEventListener('click', function(event) { console.log('Клик върху бутона!', event); }, false); // false - бубъл, true - засичане
Методът removeEventListener се използва за премахване на обработчици.
Делегиране на събития: Прикачване на един обработчик към родителски елемент за обработка на събития от дъщерните елементи. Спестява ресурси и улеснява работата с динамично съдържание.
// Пример за делегиране
const list = document.querySelector('ul');
list.addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
console.log('Клик върху елемент от списъка:', event.target.textContent);
}
});