2012-11-11 11 views
8

Ich versuche, ein benutzerdefiniertes JavaScript-Ereignis zu erstellen. Das Ereignis funktioniert und wird korrekt ausgelöst, aber das "Detail" -Objekt, das ich übergebe, ist nicht verfügbar.JavaScript CustomEvent Detail nicht übergeben

Hier ist der Code, den ich verwende, um das Ereignis zu erstellen und zu versenden;

var double_tap = new CustomEvent("doubleTap", { 
    detail: { 
     hello: 'world' 
    }, 
    bubbles: true, 
    cancelable: true 
}); 

this.dispatchEvent(double_tap); 

Dann verwende ich jquery, um einen Ereignis-Listener zum Körper hinzuzufügen;

$('body').on('doubleTap', function(e) { 
    console.log(e); 
}); 

Es tut Feuer, und das Konsolenprotokoll geschieht, aber leider das Protokoll gibt nur die Ereignisdetails einschließlich Blasen und kündbare Eigenschaften, aber nie das ‚Details‘ Objekt, so dass Informationen nicht zugänglich ist.

Hier ist eine JSBIN als Beispiel, im Erstellen des Ereignisses auf das Click-Ereignis des Körpers, so dass Sie die Konsole sehen können; http://jsbin.com/looseroots/6

Ich möchte in der Lage sein, die Daten aus dem "Detail" -Objekt zu erhalten, wenn das Ereignis ausgelöst wird. Was mache ich falsch? Ich habe dies in Chrome getestet und Safari auf iOS

Antwort

8

Sie benötigen die originalEvent Eigenschaft für die Details

console.log(e.originalEvent.detail); 
+0

So einfach, aber keine der Dokumentation, die ich finden konnte, erklären die CustomEvent-Methode wies darauf hin. Vielen Dank! – Joel

+1

Dies ist nicht wirklich ein CustomEvent-Problem, ich glaube, dass jQuery ein DOM-Ereignis in ein eigenes Event-Objekt umschließt. (Ich bin kein jQuery-Experte, also könnte ich falsch liegen) – lostsource

+0

Kann auch Datenargumente zu jQuery-Handlern hinzufügen, wenn alle behalten möchten Code innerhalb von jQuery Realm. '$ ('body'). on ('doubleTap', Funktion (e, arg1, arg2)' – charlietfl

4
obj.addEventListener("eventName", function(e) { 
console.log(e.your_property) 
}) 

var event = new CustomEvent("eventName"); 
event.your_property = { key: "value" }; 

obj.dispatchEvent(event); 

Sie können Eigenschaften in Ihrem CustomEvent erstellen, wenn Sie versenden Sie senden es.

+0

Vielen Dank !, Ich verschwendete wie 3 Stunden mit diesem Problem zu tun! – Hosar

+0

Dies ist Gold! :-) – Mac