Liste toutes les liaisons d'un élément (avec jQuery)

Existe-t-il un moyen d'énumérer toutes les liaisons sur un élément jQuery? JQuery's bind () ne semble que les attacher et je n'ai pas trouvé une fonction jQuery qui obtient les liaisons.

Cette réponse s'applique à jQuery version <1.8

La meilleure façon de le faire, probablement le plugin FireQuery pour FireFox. Vraiment un outil soigné.

Si vous voulez / besoin d'accomplir ce "code in-code", utilisez l'objet jjuerys .data('events') .

 $.each($('#element').data('events'), function(i, e) { console.log(i, e); }); 

Tous les événements qui ont été liés via jQuery sont poussés dans cet objet. Bien sûr, il pourrait y avoir d'autres gestionnaires d'événements comme n'importe qui, pour lesquels vous devriez vérifier explicitement.

Ref .: FireQuery

À partir de jQuery 1.8, la nouvelle syntaxe est:

 $.each($._data("#element", "events"), function(i, e) { console.log(i, e); }); 

Notez que c'est $._data("#element" NOT $.data($("#element") , alors assurez-vous de dérouler votre sélecteur si vous devez utiliser $myJQuerySelector[0] .

Lire la suite…

Il doit y avoir une façon de le faire par programmation, et quelqu'un l'a compris et l'a mis dans un outil visuel.

Je ne sais pas si cela répond à votre question, mais j'ai trouvé que le meilleur outil pour déterminer ces liens est appelé Événement visuel (pas un nom formidable, très difficile pour Google).

Cela fonctionne dans Firefox et Chrome, Chromium, Safari, etc. Certains problèmes de liaison peuvent se produire différemment dans différents navigateurs. Il est bon de couvrir toutes les bases.

Si vous avez une superposition et que vous devez obtenir sous un élément, vous pouvez double-cliquer sur n'importe quelle liaison pour la cacher pour accéder à l'événement que vous devez afficher.

Texte alt

Sur la base des autres réponses et commentaires.

JQuery 1.8 et plus

 var elementSelector = '#element-id'; $(elementSelector).bind('click.test', function(){}); // For testing. $.each($._data($(elementSelector)[0], 'events'), function(i, e) { console.log(i, e); }); 

Le premier argument de $._data() n'est pas un objet jquery.

Notez qu'il ne s'agit pas d'une interface publique prise en charge ; Les structures de données réelles peuvent changer incompatibles d'une version à l'autre. – Jquery 1.8 Realeased


Ci-dessous JQuery 1.8

 var elementSelector = '#elementid'; $(elementSelector).bind('click.test', function(){}); // For testing. $.each($(elementSelector).data('events'), function(i, e) { console.log(i, e); }); 

Dans la version 1.6, jQuery a séparé ses données internes des données de l'utilisateur pour éviter les collisions de noms. Cependant, certaines personnes utilisaient la structure de données "événements" sans papiers internes, de sorte que nous avons pu encore récupérer cela via .data (). Ceci est supprimé en 1.8.- Jquery 1.8 Realeased

Le code suivant examine un élément et tous ses enfants et console.logs tous les événements liés.

 function findMyEvents(me) { if (typeof $._data($(me)[0], 'events') !== "undefined") { console.log($(me)[0]) console.log($._data($(me)[0], 'events')) $._data($(me)[0], 'events') }; for (var i = 0; i < $(me).children().length; i++) { findMyEvents($(me).children()[i]) } } findMyEvents('body') 

Je ne peux pas faire la réponse de Grinn. À partir de jQuery 1.8 trouver les gestionnaires d'événements , je pense que l'exemple devrait être changé en

 var obj = $('#element'); $.each($._data(obj[0], "events"), function(i, e) { console.log(i, e); });