У DOM майже всі події розповсюджуються через ієрархічне дерево елементів. Це означає, що коли ви взаємодієте з дочірнім елементом (наприклад, натискаєте кнопку), ця подія "спливає" вгору по дереву – спочатку обробляється саме на елементі-цілі, а потім – на його батьківських елементах. Такий механізм дозволяє реалізувати делегування подій та спрощує керування обробниками для складних інтерфейсів.
Приклад: Розповсюдження подій
Розглянемо простий приклад, де подія "click" спочатку обробляється на кнопці, а потім "спливає" до батьківського елемента (div):
https://stackblitz.com/edit/web-platform-jpk63zl4?devToolsHeight=33&file=index.html
Що відбувається при кліку на кнопку:
"button").<div>, і викликається його обробник (виводить в консоль "div").
Розповсюдження подій складається з трьох основних фаз:
event.target:
Вказує на початковий елемент, на якому подія була викликана. Це може бути як кнопка, так і будь-який інший дочірній елемент.
event.currentTarget:
Вказує на елемент, на якому спрацював обробник (змінюється під час руху події).
https://stackblitz.com/edit/web-platform-xcousecn?devToolsHeight=33&file=script.js
logEvent для всіх елементів DOM.event.target) і на якому елементі обробляється подія (event.currentTarget).