Идущий с крайними. События распространяются вплоть до элемента, на который они отправляются и создаются резервные копии ... Таким образом, чтобы инициировать событие по любому и по существу всем элементам (поскольку неизвестно, какие элементы нуждаются в событии), вы можете найти «концы» всех «филиалы» DOM и отправки им событий.
JQuery позволяет легко выбрать конец ветви
function onLoad() {
var myDiv = document.getElementById("myDiv");
myDiv.addEventListener("myEvent", function() {
alert("Yes!");
});
$(':not(:has(*))').each(function(i, el){
el.dispatchEvent(new CustomEvent("myEvent", {
detail: null,
bubbles: true
}));
});
}
https://jsfiddle.net/dkqagnph/1/
Используя это обеспечит КАЖДЫЙ DOM элемент (крепится к корпусу) получает событие (при условии, что нет распространения элемента остановки) и, таким образом, не нужно знать, какие элементы слушают или заботятся о событии. Это не посылает каждому отдельному элементу, так как это будет излишним, но только конец и позволяет пузыриться.
ПРИМЕЧАНИЕ: элементы с более чем одним ребенком получат событие более одного раза. Возможно, вы захотите, чтобы ваш код запускался более одного раза или его не волнует, если он работает более одного раза.
Да, но я не хочу делать это напрямую. В моем реальном коде структура DOM динамична, элементы приходят и уходят, поэтому я хочу, чтобы обработчики событий были активны только тогда, когда его элемент привязан к DOM. – Rediska
Может быть событие пузырящееся. Вы пробовали 'myDiv.addEventListener (« myEvent », function() {alert (« Да! »), True});' – Shilly
yes Я сделал, как true, так и false. Не помогает. – Rediska