351 votos

¿Puedo encontrar eventos limitados en un elemento con jQuery?

Unir dos controladores de eventos en el siguiente link:

<a href='#' id='elm'>Show Alert</a>

JavaScript:

$(function()
{
  $('#elm').click(_f);
  $('#elm').mouseover(_m);
});

function _f(){alert('clicked');}
function _m(){alert('mouse over');}

¿Hay alguna forma para obtener una lista de todos los eventos limitados en un elemento, en este caso el elemento con id="elm" ?

507voto

Jonathan Sampson Puntos 121800

En las versiones modernas de jQuery, se puede usar el $._data método para encontrar los eventos conectados por jQuery para el elemento en cuestión. Nota, este es un uso interno sólo método:

// Bind up a couple of event handlers
​$("#foo").on({
    click: function(){ alert("Hello") },
    mouseout: function(){ alert("World") }
});​​​

// Lookup events for this particular Element
​$._data( $("#foo")[0], "events" );

El resultado de $._data será un objeto que contiene tanto de los eventos que hemos creado (en la foto de abajo con el mouseout propiedad ampliado):

Console output for $._

A continuación, en el Chrome, se puede hacer clic derecho la función de controlador y haga clic en "ver definición de la función" mostrar el lugar exacto donde se encuentra definido en el código.

6voto

JohnK Puntos 839

El plugin de jQuery plugin de auditoría debe dejarte hacer esto a través de la normal Chrome Dev Tools. No es perfecto, pero debe dejarte ver el controlador actual atado al elemento/evento y no sólo el controlador genérico jQuery.

2voto

Adrian Liew Puntos 33

Yo usé algo parecido a este if($._data($("a.wine-item-link") [0]) entendían == null) {... hacer algo, bastante mucho atar sus controladores de eventos nuevo} para comprobar si mi elemento es obligado para cualquier evento. Dirá todavía indefinido (null) si tienes libre todos sus controladores de eventos de ese elemento. Esa es la razón por qué estoy evaluando esto en un if expresión.

0voto

giri-jeedigunta Puntos 66

Cuando pase una poco compleja consulta de DOM a $._data como esta: $._data($('#outerWrap .innerWrap ul li:last a'), 'events') lanza indefinida en la consola del navegador.

Así que tuve que usar $._data en los padres div: $._data($('#outerWrap')[0], 'events') para ver los eventos para la una etiquetas. Aquí está un JSFiddle para el mismo: http://jsfiddle.net/giri_jeedigunta/MLcpT/4/

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X