365 votes

Puis-je trouver les événements liés à un élément avec jQuery?

- Je lier deux gestionnaires d'événements sur ce lien:

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

JavaScript:

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

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

Est-il possible d'obtenir une liste de tous les événements liés à un élément, dans ce cas sur l'élément avec id="elm"?

530voto

Jonathan Sampson Points 121800

Dans les versions modernes de jQuery, vous devez utiliser l' $._data méthode pour trouver tous les événements attachés par jQuery pour l'élément en question. Remarque, c'est un usage interne uniquement de la méthode:

// 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" );

Le résultat de l' $._data sera un objet qui contient à la fois des événements, nous avons défini (photo ci-dessous avec l' mouseout bien développée):

Console output for $._

Puis dans Chrome, vous pouvez faire un clic droit de la fonction de gestionnaire et cliquez sur "afficher la définition de fonction" pour vous montrer l'endroit exact où il est défini dans votre code.

6voto

JohnK Points 839

Le jQuery de Vérification plugin plugin vous permettra de le faire par le biais de la normale Chrome Dev Tools. Il n'est pas parfait, mais il devrait vous permettre de voir le gestionnaire réel lié à l'élément/l'événement, et pas seulement le générique jQuery gestionnaire.

2voto

Adrian Liew Points 33

J'ai utilisé quelque chose comme ceci if($._data($("un.vin-article-lien")[0]).events == null) { ... faire quelque chose, assez bien lier leurs gestionnaires d'événements de nouveau } pour vérifier si un élément est lié à un événement. Il va encore dire non défini (null) si vous avez seules toutes vos gestionnaires d'événements à partir de cet élément. C'est la raison pour laquelle je suis à l'évaluation de ce dans une expression if.

1voto

giri-jeedigunta Points 66

Lorsque je passe un peu complexe DOM requête $._data comme ceci: $._data($('#outerWrap .innerWrap ul li:last a'), 'events') il le jette pas défini dans le navigateur de la console.

J'ai donc dû utiliser $._data sur le div parent: $._data($('#outerWrap')[0], 'events') voir les événements pour les tags. Voici un JSFiddle pour la même chose: http://jsfiddle.net/giri_jeedigunta/MLcpT/4/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X