2010-03-04 23 views
75

Intenté buscar en línea, pero no parece que pueda formular la consulta de búsqueda correctamente.¿Cómo comprobar si hay detectores/manejadores de eventos de JavaScript conectados a un elemento/documento?

Tan simple como suena, ¿cómo puedo, ya sea con jquery o simplemente javascript enumerar todos los controladores o eventos que se adjuntan a elemento (s)/documento/ventana o presente en dom.

Solo me pregunto.

Gracias de antemano.

+1

Ver http://stackoverflow.com/questions/446892/how-to-find-event-listeners-on-a-dom-node y http: //stackoverflow.com/questions/7810534/have-any-browsers-implemented-the-dom3-eventlistenerlist/7814692#7814692 – Nickolay

Respuesta

47

En jQuery antes de 1.8, intente utilizar $("#element").data("events")

EDIT:

Existe también jQuery extensión: listHandlers

+4

gracias Laimoncijus, ¿cómo sacarías eso sin jquery? Puede ser que me puedas dar un enlace al material de lectura sobre este tema. – GnrlBzik

+3

Parece que no es realmente posible en la implementación actual del modelo de eventos W3C. Ver: http://www.quirksmode.org/js/events_advanced.html ("? ¿Qué controladores de eventos son registrados" buscar) La página hay un poco más viejo, así que tal vez ahora las cosas se pusieron mejor, no puedo decir que adelgaza, nunca lo intenté yo mismo ... – Laimoncijus

+0

Gracias Laimoncijus:) – GnrlBzik

3

acabo de descubrir evento visual 2:

http://www.sprymedia.co.uk/article/Visual+Event+2

pasar por debajo de "hacerlo" ir a la sección" y arrastrar el enlace de texto a su barra de herramientas de marcadores ir a una página que tiene eventos y haga clic en el marcador

probado en FF Mac

+0

Esto es cierto, actualmente no funciona con eventos delegados. El ticket se ha agregado para poder abordar esto en el futuro: https://github.com/DataTables/VisualEvent/issues/33 – KoalaBear

32

Cuando la depuración, si quieres simplemente ver si hay un evento , Recomiendo usar Visual Event o la sección Elementos de las herramientas para desarrolladores de Chrome: seleccione un elemento y busque "Escuchas de eventos en la esquina inferior derecha".

En su código, si está utilizando jQuery antes de la versión 1.8, puede utilizar:

$(selector).data("events") 

para obtener los eventos. A partir de la versión 1.8, esto se interrumpe (ver this bug ticket). Se puede utilizar:

$._data(element, "events") 

pero esto no es recomendable, ya que es una estructura interna de jQuery, y podría cambiar en futuras versiones.

This question tiene algunas respuestas que pueden ser útiles, pero ninguna de ellas es particularmente elegante de la misma manera que $(selector).data("events").

+0

+1 El evento visual es indispensable. Francamente, me sorprende que esta funcionalidad no haya sido incluida en los navegadores para sus herramientas de desarrollo. – L0j1k

15

Sin jQuery:

si se añadieran los oyentes mediante el método elem.addEventListener(), no es fácil hacer una lista de estos oyentes. Puede anular el método EventTarget.addEventListener() envolviéndolo con el suyo. Entonces usted tendrá la información, qué oyentes fueron registrados.

var f = EventTarget.prototype.addEventListener; // store original 
EventTarget.prototype.addEventListener = function(type, fn, capture) { 
    this.f = f; 
    this.f(type, fn, capture); // call original method 
    alert('Added Event Listener: on' + type); 
} 

Ejemplo de trabajo se pueden encontrar en http://jsfiddle.net/tomas1000r/RDW7F/

+0

¡agradable! respuesta correcta a la pregunta. –

Cuestiones relacionadas