2015-12-04 19 views
8

C'è un modo per confermare che revmoveEventListener ha avuto successo? Lo sto usando su un elemento video per l'evento "playing"/"pause". Il comportamento che sto cercando di ottenere sembra essere incoerente. Ecco un esempio di come lo sto usando.Come faccio a sapere che removeEventListener ha avuto successo?

var playListener = function(){ 
    console.log("video is playing") 
} 

videoElement.addEventListener("playing", playListener) 

qualche altra parte nel mio codice

videoElement.removeEventListener("playing", playListener) 

playListener è disponibile dove sto usando removeEventListener e sto passando intorno id dell'elemento video in modo che sia lo stesso VideoElement ho aggiunto il listener di eventi .

Voglio sapere se riesco a fare qualche tipo di console.log o qualcosa per confermare che il removeEventListener ha funzionato.

+0

Questo concetto era piuttosto un ostacolo per me: la rimozione di un listener richiede la stessa identica funzione per l'argomento. Quindi, se invii una funzione associata (playListener.bind (this)), non è esattamente la stessa funzione (l'associazione crea un duplicato della tua funzione originale, completa della sua allocazione di memoria). Quindi dovrai prima associare la funzione a un'altra variabile, quindi usare la funzione pre-associata per aggiungere e rimuovere. – bob

risposta

9

Sfortunatamente, il metodo removeEventListener non restituisce nulla o genera un errore quando non rimuove correttamente un listener di eventi. Non esiste anche alcun metodo JavaScript per accedere a quali listener di eventi sono attualmente impostati per un dato elemento.

Per quanto riguarda il debug del problema, la maggior parte dei moderni strumenti di sviluppo del browser offre la possibilità di visualizzare i listener di eventi. Si può mettere una dichiarazione debugger nel codice (o impostare un punto di interruzione) per sospendere l'esecuzione immediatamente prima di aver chiamato removeEventListener:

debugger; 
videoElement.removeEventListener("playing", playListener); 

Una volta che il punto di interruzione viene raggiunto e l'esecuzione è in pausa, controllare i listener di eventi da Chrome Dev Tools scheda Elementi per verificare che il listener di eventi è attualmente impostato:

Chrome Dev Tools Event Listners

si possono anche trovare listener di eventi in Firefox strumenti di sviluppo scheda ispettore:

Firefox Dev Tools Event Listeners

Dopo aver verificato che il listener di eventi è attualmente impostato, tornare al debugger (Chrome "Sources" Scheda/Firefox "Debugger" Tab) ed eseguire il codice (F10) Linea per linea.

Dopo aver effettuato la chiamata a removeEventListener, tornare indietro e controllare nuovamente i listener di eventi. Se ha avuto successo, il listener di eventi non dovrebbe più essere impostato. Una volta terminato il debug, è possibile riprendere l'esecuzione del codice (F8).

Problemi correlati