DOM CustomEvent слушатели

Я думаю, что это лучше всего спросить с кодом:

var event = new CustomEvent("custom", {bubbles: true}); // Create Event

// Create and attach element
var element = document.createElement("div");
document.body.appendChild(element);

element.addEventListener("custom", function(e) {
    console.log("listening");
});

// At this point I thought that if the "custom" event were fired that my  
// element listing would be triggered with the listener callback.
// But.... 

document.body.dispatchEvent(event);
// check the console... nothing :(

// the only way I am able to get my element event listener to fire is if 
// the element calling the dispatchEvent(event) is the element itself.
element.dispatchEvent(event);

Что я делаю неправильно? Это способ, которым события должны работать? У меня вопрос, как мне прослушать пользовательское событие, когда оно не отправлено?

dispatchEvent(event)

из элемента, содержащего обратный вызов слушателя

element.addEventListener("custom", function(){});

1 ответ

Вы должны отправить событие элементу, который его действительно прослушивает, или элементу ниже в цепочке, если он должен пузыриться.

Вы не можете прослушать событие в DIV, а затем отправить событие в теге BODY и ожидать, что оно будет пузыриться вниз

element.dispatchEvent(event);

Является ли правильный способ инициировать событие, оно не будет пузыриться от тела к ребенку, события будут пузыриться только вверх по цепочке DOM.

Другие вопросы по тегам