2012-06-13 12 views
12

So che puoi vedere i listener di eventi in Chrome Inspector ma sto facendo un po 'di lavoro di debug e ci sono così tanti ascoltatori di eventi in giro che mi piacerebbe disabilitare alcuni senza modificare il codiceUsa l'ispettore webkit di Chrome per rimuovere un listener di eventi

enter image description here

c'è un modo per disattivare rapidamente un listener di eventi dalla finestra di ispezione Webkit?

Forse dare un'occhiata e digitare del codice nella console per il listener removeEventListener? Come lo farei? Per esempio, come rimuovo l'ascoltatore "click" sopra

risposta

4

Spiacente, sei sfortunato (almeno per il momento). removeEventListener richiede l'oggetto esatto listener Function come argomento, e DevTools non ti permette di ottenere una presa della funzione di ascolto in qualsiasi modo.

Se hai sicuramente bisogno di questa funzione, invia un bug a http://new.crbug.com (contro Chrome) o http://bugs.webkit.org (contro WebKit, il modo preferito).

+0

@ risposta di Jackson sotto opere in Chrome come del 2017. https://stackoverflow.com/a/32191966/2661831 – Josiah

3

È possibile rimuovere un listener di eventi nella console javascript. Prima trova l'elemento al quale è collegato questo listener di eventi. Chiamiamolo e. Quindi esegui: e.onclick=null. Ad esempio, molti listener di eventi sono collegati a "body", quindi il codice sopra riportato diventa: document.body.onclick=null. Successivamente viene rimosso il listener di eventi.

+0

appena provato quello che lei ha suggerito e didn funziona quando si crea un listener di eventi con: document.body.addEventListener ('click', function() {console.log ('clicked'); }); – d48

+1

sì hai ragione. I miei test non coprivano tutti i casi. Sembra che la risposta corretta sia qui: http://stackoverflow.com/questions/4919079/remove-all-onclick-events-for-an-element –

7

È possibile utilizzare getEventListeners(element).click[index].listener per ottenere un riferimento a un listener (in una console WebKit).

Quindi, per rimuovere il primo ascoltatore, si potrebbe fare:

document.removeEventListener('click', getEventListeners(document).click[0].listener) 

Allo stesso modo, per rimuovere tutti gli ascoltatori, è possibile utilizzare questa funzione:

function removeEventListeners(element, listenerMap) { 
    Object.keys(listenerMap).forEach(function (name) { 
     var listeners = listenerMap[name]; 
     listeners.forEach(function (object) { 
      element.removeEventListener(name, object.listener); 
     }); 
    }); 
} 

removeEventListeners(document, getEventListeners(document)) 
+0

Questa è un'ottima risposta. Nota, potresti doverlo chiamare con la finestra invece del documento. – Josiah

1

Semplicemente:

getEventListeners(document).click[0].remove() 

Questo funziona anche con altri elementi:

getEventListeners($('#submit-button')[0]).click[0].remove() 

e altri tipi di eventi:

getEventListeners($('#login-form')[0]).submit[0].remove() 
Problemi correlati