2016-07-01 20 views
0

Ich denke, das ist am besten mit dem Code gefragt:DOM CustomEvent Zuhörer

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); 

Was mache ich falsch? Ist das so, dass Veranstaltungen funktionieren sollen? Meine Frage ist, wie kann ich ein benutzerdefiniertes Ereignis hören, wenn das Ereignis nicht

dispatchEvent(event) 

aus dem Elemente mit dem Hörer Rückruf

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

Antwort

0

Sie das Ereignis auf dem Elemente versenden muß versandt wird, das ist hört tatsächlich danach oder ein Element in der Kette, wenn es blasen soll.

Sie können nicht für die Veranstaltung auf einem DIV hören und versenden dann das Ereignis auf dem BODY-Tag, und erwarten, dass es zu sprudeln nach unten

element.dispatchEvent(event); 

Ist der richtige Weg, um das Ereignis zu feuern, es gewann Blase nicht vom Körper zu einem Kind, Ereignisse sprudeln nur die DOM-Kette nach oben.

+0

Um das hinzuzufügen ... Sie könnten umgekehrt Ihren Listener stattdessen auf den Dokumentkörper anwenden, und es würde auslösen, ob das Ereignis auf den Körper ODER das Element ausgelöst wird. – relic

+0

@relic - Wenn der Ereignis-Listener auf dem Hauptteil war, würde das Auslösen des Ereignisses auf dem Hauptteil oder einem Kind davon den Ereignishandler auslösen. – adeneo

+0

Rechts. Ich habe es nicht angesprochen, um dich oder irgendwas zu korrigieren, ich habe es nur zum Nutzen des OP aufgezeigt. – relic