Existe-t-il un moyen de vérifier si un événement existe dans jQuery? Je travaille sur un plug-in qui utilise des événements d'espacement de nom personnalisés et j'aimerais pouvoir vérifier si l'événement est lié à un élément ou non.
$('body').click(function(){ alert('test' )})
var foo = $.data( $('body').get(0), 'events' ).click
// you can query $.data( object, 'events' ) and get an object back, then see what events are attached to it.
$.each( foo, function(i,o) {
alert(i) // guid of the event
alert(o) // the function definition of the event handler
});
Vous pouvez inspecter en alimentant la référence d'objet (pas l'objet jQuery cependant) à $ .data, et pour le deuxième argument, alimentez des événements qui renverront un objet contenant tous les événements tels que 'click'. Vous pouvez parcourir cet objet et voir ce que fait le gestionnaire d'événements.
Vous pouvez utiliser:
$("#foo").unbind('click');
pour vous assurer que tous les événements de clic sont non liés, puis attachez votre événement
Pour rechercher des événements sur un élément:
var events = $._data(element, "events")
Notez que cela ne fonctionnera qu'avec les gestionnaires d’événements directs, si vous utilisez $ (document) .on ("nom-événement", "sélecteur jq", fonction () {// logique}), vous voudrez voir le getEvents fonctionne au bas de cette réponse
Par exemple:
var events = $._data(document.getElementById("myElemId"), "events")
ou
var events = $._data($("#myElemId")[0], "events")
Exemple complet:
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
<script>
$(function() {
$("#textDiv").click(function() {
//Event Handling
});
var events = $._data(document.getElementById('textDiv'), "events");
var hasEvents = (events != null);
});
</script>
</head>
<body>
<div id="textDiv">Text</div>
</body>
</html>
n moyen plus complet de vérifier, incluant les écouteurs dynamiques, installé avec $ (document) .on
function getEvents(element) {
var elemEvents = $._data(element, "events");
var allDocEvnts = $._data(document, "events");
for(var evntType in allDocEvnts) {
if(allDocEvnts.hasOwnProperty(evntType)) {
var evts = allDocEvnts[evntType];
for(var i = 0; i < evts.length; i++) {
if($(element).is(evts[i].selector)) {
if(elemEvents == null) {
elemEvents = {};
}
if(!elemEvents.hasOwnProperty(evntType)) {
elemEvents[evntType] = [];
}
elemEvents[evntType].Push(evts[i]);
}
}
}
}
return elemEvents;
}
Exemple d'utilisation:
getEvents($('#myElemId')[0])
use filtre d'événements jquery
vous pouvez l'utiliser comme ça
$("a:Event(click)")
J'ai écrit un plugin appelé hasEventListener qui fait exactement cela.
J'espère que cela t'aides.
Le code ci-dessous vous fournira tous les événements de clic sur un sélecteur donné:
jQuery(selector).data('events').click
Vous pouvez le parcourir en utilisant chacun ou par ex. vérifier la longueur pour la validation comme:
jQuery(selector).data('events').click.length
Je pensais que cela aiderait quelqu'un. :)
J'ai répondu à une question similaire ici: helper hasHandlers ()
Travailler avec jQuery> = v1.11.0
Ce travail pour moi montre les objets et le type d'événement qui s'est produit.
var foo = $._data( $('body').get(0), 'events' );
$.each( foo, function(i,o) {
console.log(i); // guide of the event
console.log(o); // the function definition of the event handler
});