2013-05-12 4 views
1

Une fonction déclenche un événement et transmet des données qui seront éventuellement traitées par un écouteur. Sinon, la fonction veut traiter les données par elle-même. Eh bien, comme je ne sais pas si le paquet a été manipulé ou non, mon idée était de savoir s'il y avait un auditeur du tout. Y a-t-il un moyen de le faire ou est-ce que quelqu'un a de meilleures idées à mon problème?Demander si l'événement a un écouteur dans jQuery

Merci d'avance!

+0

Essayé '$ (élément) .hasEventListener (type)'? – Cherniv

+0

On dirait que c'est un plugin: https://github.com/sebastien-p/jquery.hasEventListener – Barmar

+1

Tous les événements sont liés à certains éléments. Donc, dans Chrome, vous avez des outils de développement -> onglet éléments -> onglet écouteurs d'événements (dans le côté droit). Je suppose qu'il y a quelque chose de similaire dans les devtools des autres navigateurs. – zeliboba

Répondre

2

Vous pouvez à cela avec jQuery avant 1,8 comme ceci:

<script src="http://code.jquery.com/jquery-1.6.min.js"></script> 

<script> 
$(document).ready(function() { 

$("#click_here").click(function() { 
    alert("Handler for .click() called."); 
}); 

console.log($('#click_here').data('events')); 

}); 

</script> 

<div id="click_here">Click here</div> 
1

J'ai créé un plugin principalement à utiliser dans vos tests.

// Example usage 
$('.foo').hasEvent('click', someHandler) 
// returns true if someHandler is bound via jQuery on '.foo' 
// for the click event 

Le plugin est testé pour fonctionner avec jQuery 1.7 et jusqu'à

The plugin is hosted on github

1

j'ai eu un problème très similaire. Ce n'est jamais quelque chose qui a été correctement pris en charge dans jquery et à la place était un peu un hack. Ainsi, vous pouvez le faire avant la version 1.8 en jquery en utilisant

data('events')

Après 1,8, vous pouvez utiliser:

$._data($('.element')[0], 'events');

mais si vous essayez de faire ce que je faisais ... assurez-vous qu'un gestionnaire d'événement n'est affecté qu'une seule fois sur un contrôle (par exemple un bouton de sauvegarde après validation d'un formulaire), vous pouvez alors:

  1. Ajouter ac lass et l'enlever pour indiquer si un élément a un événement (moche).
  2. Retirez tout handers avant de l'affecter à savoir

$('element').unbind('event'); $('element').on('click', save);

Questions connexes