Come clonare o ri-inviare eventi DOM?

Sto cercando un modo semplice e astratto di clonazione o re-invio di eventi DOM solo. Non sono interessato a clonare i nodes DOM.

Ho sperimentato un po ‘, ho letto la specifica DOM Events e non ho trovato una risposta chiara.

Idealmente, sto cercando qualcosa di semplice come:

handler = function(e){ document.getElementById("decoy").dispatchEvent(e) } document.getElementById("source").addEventListener("click", handler) 

Questo esempio di codice, ovviamente, non funziona. Esiste un’eccezione DOM che indica che l’evento è attualmente in fase di spedizione, ovviamente.

Mi piacerebbe evitare di creare manualmente nuovi eventi con document.createEvent() , inizializzandoli e inviandoli.

C’è una soluzione semplice a questo caso d’uso?

Lo so, la domanda è vecchia e l’OP voleva evitare di creare / inizializzare l’approccio, ma c’è un modo relativamente semplice per duplicare gli eventi:

 new_event = new MouseEvent(old_event.type, old_event) 

Se vuoi qualcosa di più dei semplici eventi del mouse, puoi fare qualcosa del genere:

 new_event = new old_event.constructor(old_event.type, old_event) 

E nel contesto originale:

 handler = function(e) { new_e = new e.constructor(e.type, e); document.getElementById("decoy").dispatchEvent(new_e); } document.getElementById("source").addEventListener("click", handler); 

(Per gli utenti di jQuery: potrebbe essere necessario utilizzare e.originalEvent.constructor anziché e.constructor )