2014-11-10 12 views
5

Alcuni dei plug-in di terze parti collegheranno il eventListener nel sito. Come rimuovere l'eventListener senza conoscere la funzione allegata.removeEventListener senza conoscere la funzione

Mi riferisco a questo removeEventListener ma non riesco a ottenere alcun indizio per rimuovere questo.

Ad esempio: getEventListeners(window) mostra gli eventi allegati. Ma, quando provo a rimuovere l'evento utilizzando window.removeEventListener("eventname") non funziona senza sapere che funzione.

Si prega di aiuto, grazie in anticipo.

risposta

7

getEventListeners(window) restituirà una mappa degli eventi e dei relativi listener di eventi registrati.

Quindi per l'evento DOMContentLoaded, ad esempio, è possibile avere molti listener di eventi. Se si conosce l'indice di chi ascolta che si desidera rimuovere (o se esiste una sola), si può fare:

var eventlistener = getEventListeners(window)["DOMContentLoaded"][index]; 
window.removeEventListener("DOMContentLoaded", 
          eventlistener.listener, 
          eventlistener.useCapture); 
+0

Ancora più conveniente perché restituisce anche la funzione di cancellazione della registrazione 'remove':' getEventListeners (window) .DOMContentLoaded [0] .remove() '. – dfsq

+0

@dfsq, 'chrome' sì, ma non' firefox'. (non può testare per esempio). – manji

+0

@manji Grazie amico. Funziona in cromo. – Dineshkani

4

Sfortunatamente, non puoi farlo. Si è necessario per avere un riferimento alla funzione di gestore eventi per rimuoverlo da removeEventListener.

L'unica opzione se non è possibile ottenere tale riferimento è la sostituzione completa di Node.

+0

JANDY non v'è alcun modo per ottenere che il riferimento tramite jQuery o JavaScript. Perché quell'evento è aggiunto dalla terza parte e quell'evento è allegato nell'elemento della finestra – Dineshkani

+0

@Dineshkani AFAIK non c'è (ma spero che alcuni Ninja mi correggeranno qui se sbaglio). Gli eventi aggiunti in modo nativo tramite 'addEventListener' non sono archiviati ovunque accessibili da Javascript. – jAndy

+0

Grazie per la tua risposta @jAndy – Dineshkani

Problemi correlati