2012-01-30 4 views
9

Czy istnieje sposób JavaScript do przekazywania niestandardowych danych do ręcznie utworzonego zdarzenia JavaScript?Tworzenie zdarzeń JavaScript z niestandardowo dołączonymi danymi

Ok, powiedzmy, że mam ten kod w celu utworzenia i wywoła zdarzenie JavaScript:

var evObj = document.createEvent('HTMLEvents'); 
evObj.initEvent('submit', bubbling, cancelable); 
anElement.dispatchEvent(evObj); 

to działa prawidłowo i może być obsługiwany za pomocą tego kodu:

document.addEventListener('submit', mySubmitEventHandler, true); 

Ale muszę sposób przekazywania dodatkowych danych do zdarzenia, aby mySubmitEventHandler wiedział, czy zdarzenie zostało wywołane przez użytkownika, czy przez utworzenie zdarzenia JavaScript, jak pokazano powyżej. Wartość boolowska byłaby wystarczająca.

Jak dodać coś takiego jak "myEvent = true" do nowo utworzonego evObj?

I proszę nie odpowiadać jQuery, muszę zrobić to w czystym JavaScript.

Odpowiedz

15

Dołączyć parametr do evObj.

evObj.flag = 'Hi!'; 
anElement.dispatchEvent(evObj); 

Ten kod wskazuje, że obiekt zdarzenia przekazywane przez dispatchEvent jest równa jeden w słuchacza zdarzeń (Live demo):

var evObj = document.createEvent('HTMLEvents'); 
document.body.addEventListener('test', function(e){ alert(e === evObj); },true); 
evObj.initEvent('test', true, true); 
document.body.dispatchEvent(evObj); // Shows alert, "true" 
+2

Tak łatwo, że to boli! Wielkie dzięki :) – Alp

+0

Bardzo nowatorska sztuczka! Dzięki :) –

3

twoje evObj to normalny obiekt, do którego możesz dodać dowolne dane jako własność obiektu, np. EvObj.myData = "blablabla"; a następnie odczytać dane w słuchacza

Nadzieja to pomaga

+0

podobne odpowiedzi, ale +1 ponieważ został opublikowany wcześniej minutę niż powyższa odpowiedź! –