2012-06-13 12 views
12

Sé que puede ver los detectores de eventos en el Inspector de Chrome, pero estoy haciendo algunos trabajos de depuración y hay tantos oyentes de eventos por ahí Me gustaría desactivar algunos sin editar el códigoUse el inspector de webkit de Chrome para eliminar un detector de eventos

enter image description here

¿hay una manera de desactivar un detector de eventos rápidamente del inspector de Webkit?

¿Quizás eche un vistazo y escriba algún código en la consola al removeEventListener el oyente? ¿Cómo haría esto? Por ejemplo, ¿cómo eliminaría el oyente 'clic' sobre

Respuesta

4

Lo siento, está de suerte (al menos por el momento) removeEventListener requiere el objeto de función de escucha exacta como argumento, y DevTools no le permiten obtener un control de la función del oyente de cualquier manera.

Si definitivamente necesita esta característica, envíe un error al http://new.crbug.com (contra Chrome) o http://bugs.webkit.org (en contra de WebKit, la forma preferida).

+0

@ respuesta de Jackson por debajo de obras en cromo a partir de 2017. https://stackoverflow.com/a/32191966/2661831 – Josiah

3

Puede eliminar un detector de eventos en la consola de JavaScript. Primero encuentre el elemento al que está conectado este detector de eventos. Vamos a llamarlo e. Luego ejecuta: e.onclick=null. Por ejemplo, muchos detectores de eventos están adjuntos a "cuerpo", luego el código anterior se convierte en: document.body.onclick=null. Después de eso, se elimina el detector de eventos.

+0

acaba de intentar lo que usted sugiere y didn No funciona cuando se crea un detector de eventos con: document.body.addEventListener ('click', function() {console.log ('clicked'); }); – d48

+1

sí, tienes razón. Mis pruebas no cubrieron todos los casos. Parece que la respuesta correcta está aquí: http://stackoverflow.com/questions/4919079/remove-all-onclick-events-for-an-element –

7

Puede usar getEventListeners(element).click[index].listener para obtener una referencia a un oyente (en una consola WebKit).

Por lo tanto, para eliminar la primera escucha, se puede hacer:

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

Del mismo modo, para eliminar todos los oyentes, se puede usar esta función:

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

Esta es una gran respuesta. Tenga en cuenta que es posible que deba llamarlo con ventana en lugar de documento. – Josiah

1

Simplemente:

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

Esto funciona con otros elementos, también:

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

y otros tipos de eventos:

getEventListeners($('#login-form')[0]).submit[0].remove() 
Cuestiones relacionadas