Делегування подій (Event Delegation)
Делегування подій - це прийом у JavaScript, коли ми вішаємо обробник не на кожен елемент, а на їхнього спільного батька, і використовуємо спливання подій, щоб визначити, на якому саме елементі відбулася дія.
Іншими словами: один слухач керує подіями безлічі дочірніх елементів.
Навіщо це потрібно (ключові тези для співбесіди)
- Менше обробників -> менше пам'яті, швидша робота сторінки.
- Працює для динамічно доданих елементів -> навіть якщо елемент з'явився пізніше, батьківський обробник його "спіймає".
- Краща керованість -> вся логіка в одному місці, а не розмазана по дереву DOM.
Простий приклад
Ми хочемо обробити кліки по 100 кнопках:
Наївно:
js
document.querySelectorAll('button').forEach(btn => {
btn.addEventListener('click', () => {
console.log('clicked');
});
});Правильно (делегування):
js
document.body.addEventListener('click', (event) => {
if (event.target.matches('button')) {
console.log('clicked');
}
});Як це працює?
- Користувач клікає по кнопці.
- Подія спливає вгору по дереву.
- Обробник на
bodyперехоплює подію. - Ми перевіряємо
event.target, щоб визначити елемент-кандидат.
Часта помилка на співбесіді
Плутають target і currentTarget:
- event.target - елемент, по якому клікнули (джерело).
- event.currentTarget - елемент, на якому висить слухач (батько).
Коротке визначення (якщо interviewer просить стисло)
Делегування подій - це техніка, коли один обробник на батьківському елементі обробляє події безлічі дочірніх елементів, використовуючи спливання подій.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.