379 votes

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

Je lie 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');}

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

0 votes

Cela a fonctionné pour moi : Object.keys(window).filter(f=> f.startsWith("on")==true && document.getElementByID("Any_Element_ID_ou_Referance")[f] !=undefined)

4voto

Chris22 Points 861

Bien que cela ne soit pas exactement spécifique aux sélecteurs/objets jQuery, dans FireFox Quantum 58.x, vous pouvez trouver les gestionnaires d'événements sur un élément à l'aide des outils Dev :

  1. Cliquez avec le bouton droit de la souris sur l'élément
  2. Dans le menu contextuel, cliquez sur "Inspecter l'élément".
  3. S'il y a une icône "ev" à côté de l'élément (boîte jaune), cliquez sur l'icône "ev".
  4. Affiche tous les événements pour cet élément et le gestionnaire d'événement

FF Quantum Dev Tools

4voto

Pikamander2 Points 2060

Notez que les événements peuvent être attachés au document lui-même plutôt qu'à l'élément en question. Dans ce cas, il convient d'utiliser :

$._data( $(document)[0], "events" );

Et trouver l'événement avec le bon sélecteur :

enter image description here

Et puis, regardez le manipulateur > [[FunctionLocation]]

enter image description here

2voto

Adrian Liew Points 33

J'ai utilisé quelque chose comme ceci if($._data($("a.wine-item-link")[0]).events == null) { ... faire quelque chose, à peu près lier à nouveau leurs gestionnaires d'événements } pour vérifier si mon élément est lié à un événement. La réponse sera toujours indéfinie (null) si vous avez détaché tous vos gestionnaires d'événements de cet élément. C'est la raison pour laquelle je l'évalue dans une expression if.

1voto

giri-jeedigunta Points 66

Lorsque je passe une requête DOM un peu complexe à $._data comme ceci : $._data($('#outerWrap .innerWrap ul li:last a'), 'events') il jette undefined dans la console du navigateur.

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

3 votes

La raison en est que vous déléguez l'événement à partir de $('#outerWrap') . Les événements sont en fait liés à cet élément plutôt qu'aux ancres individuelles.

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