2012-01-30 17 views
9

Esiste un modo JavaScript per trasmettere dati personalizzati a un evento JavaScript creato manualmente?Creazione di eventi JavaScript con dati personalizzati allegata

Ok, diciamo che ho ottenuto questo codice per creare e attivare un evento JavaScript:

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

Questo funziona bene e può essere gestito utilizzando questo codice:

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

Ma, ho bisogno un modo per passare ulteriori dati all'evento, in modo che mySubmitEventHandler sappia se l'evento è stato attivato da un utente o dalla creazione di eventi JavaScript come mostrato sopra. Un valore booleano sarebbe sufficiente.

Quindi, come posso aggiungere qualcosa come "myEvent = true" al nuovo evObj?

E per favore nessuna risposta jQuery, ho bisogno di fare questo in puro JavaScript.

risposta

15

Collegare il parametro da evObj.

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

Questo codice dimostra che l'oggetto evento passato per dispatchEvent è uguale a quello del listener di eventi (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

Così facile che fa male! Grazie mille :) – Alp

+0

Trucco molto innovativo! Grazie :) –

3

evObj è un oggetto normale è possibile aggiungere qualsiasi dato come proprietà dell'oggetto come evObj.myData = "blablabla"; e poi leggere i dati in chi ascolta

Spero che questo aiuti

+0

risposta simile, ma uno dal momento che questo è stato pubblicato un minuto prima rispetto alla risposta di cui sopra! –

Problemi correlati