Existe-t-il un moyen de vérifier si un événement existe dans jQuery? Je travaille sur un plugin qui utilise des événements personnalisés, et j'aimerais pouvoir vérifier si l'événement est lié à un élément ou non.Vérifiez si l'événement existe sur l'élément
Répondre
$('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 (et non l'objet jQuery bien) à .data $, et pour la deuxième alimentation des arguments « événements » et qui retourne un objet peuplé de tous les événements tels que ' Cliquez sur'. Vous pouvez parcourir cet objet et voir ce que fait le gestionnaire d'événements.
En fait, j'ai mieux aimé votre premier exemple, les événements $ .data (elem, ' ') fournit beaucoup plus d'informations. –
J'ai ajouté cela comme commentaire –
Pourquoi n'utilisez-vous pas simplement $ ('body'). Data ('events')? – James
utilisation événement jquery filtre
vous pouvez l'utiliser comme ceci
$("a:Event(click)")
Hah, merci, construit ce plugin après avoir reçu la réponse de Meder il y a des mois. –
A partir du 1.8, ce plugin ne fonctionne plus –
J'adore ça, en postant un plugin OP créé comme réponse à sa question :) – Andy
J'ai écrit un plugin appelé hasEventListener qui fait exactement cela.
Espérons que cela aide.
Le problème est, comment ça marche? Je suis là depuis quelques heures, et ce n'est toujours pas clair. Je veux juste vérifier s'il y a un événement click, et récupérer un booléen, pas un objet, mais la plupart des méthodes que vous fournissez, au moins les exemples, sont beaucoup plus compliquées. Fait intéressant: http://www.codingjack.com/playground/jquick/#haseventlistener, mais je n'utilise pas jquick, mais j'aime cette simplicité propre. –
Vous pouvez utiliser:
$("#foo").unbind('click');
pour vous assurer que tous les événements de clic sont unbinded, puis attachez votre événement
Ne vous aidez pas si vous avez utilisé live pour enregistrer l'événement. http://stackoverflow.com/questions/12755646/jquery-datatables-multiple-calls-to-event-handler-with-live-function –
La question est de vérifier si l'événement existe sur l'élément et non comment annuler les événements existants ... – Avi
@Avi, c'est toujours une bonne réponse, car dans de nombreux cas, la question est posée avec le problème à l'esprit: "Comment ne pas enregistrer un gestionnaire deux fois?" – hans
Ci-dessous le code vous fournira tous les événements de clic sur sélecteur donné:
jQuery(selector).data('events').click
Vous pouvez itérer dessus avec ou par ex. vérifier la longueur pour la validation comme:
jQuery(selector).data('events').click.length
Pensé que cela aiderait quelqu'un. :)
Ne fonctionne plus dans jQuery> = 1.8. Voir la réponse de Tom Gerken pour une solution de travail. – jbandi
Voici comment vérifier si un événement existe pour un élément
<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>
Je pense que vous pouvez simplifier ceci en utilisant: var eventBound = (events! = Null); –
Cette solution fonctionne avec jQuery 1.8.0 plus tard. Merci beaucoup Ton Gerken :) –
J'ai fini par faire ce
typeof ($('#mySelector').data('events').click) == "object"
J'ai répondu à la même question ici: hasHandlers() helper
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
});
- 1. Vérifiez si l'e-mail existe
- 2. Vérifiez si un répertoire existe en PHP
- 3. Vérifiez si le service WCF existe
- 4. LDAP | Vérifiez si l'ID utilisateur existe sur l'AD
- 5. Vérifiez si le nom d'utilisateur existe
- 6. Vérifiez si le fichier existe ou non?
- 7. Vérifiez si le fichier distant existe
- 8. Vérifiez si la valeur existe dans les listes imbriquées
- 9. Vérifiez si KeyValuePair existe avec FirstOrDefault de LINQ
- 10. Vérifiez si une colonne existe dans vb.net, ADO.net
- 11. Microsoft Reporting: vérifiez si une certaine valeur existe
- 12. Vérifiez si un index non cluster existe sur une colonne de table
- 13. Vérifiez si Outlook est installé sur le PC
- 14. Vérifiez si les métadonnées jquery existent?
- 15. Vérifiez s'il existe dans l'instruction SQL CASE
- 16. Vérifiez si le paquet Python est installé
- 17. Vérifiez si Char est dans la gamme
- 18. Vérifiez si textbox a une valeur vide
- 19. Vérifiez si ftp est complet ou non?
- 20. Vérifiez si Yahoo Messenger est installé
- 21. Vérifiez si un fichier PDF est corrompu avec PHP
- 22. Vérifiez si le formulaire interactif existe dans ColdFusion avant d'utiliser cfpdfform action = "read"
- 23. Vérifiez si un proc stocké est en cours d'exécution?
- 24. Vérifiez si un tampon char * contient des caractères UTF8?
- 25. Vérifiez si une socket est connectée avant d'envoyer des données
- 26. CrystalReportViewer, vérifiez si un rapport est actuellement affiché?
- 27. Vérifiez si une socket est déconnectée en C, sans select()
- 28. Vérifiez si le son est en cours de lecture
- 29. Vérifiez si le débogage est activé dans une application Pylons
- 30. Vérifiez si l'enregistrement a été détruit juste dans des rails
donc, en 1.8, tout cela est faux? –
@SkylarSaveland La méthode '$ .data (element," events ")' n'a jamais été officielle. Mais dans jQuery 1.8.0, cette méthode est restée via '$ ._ data (element," events ")'. En savoir plus [ici] (http://blog.jquery.com/2012/08/09/jquery-1-8-released/) – Anton