Mise à jour du 24 août 2012 : dans jQuery 1.8, il n'est plus possible d'accéder aux événements de l'élément en utilisant .data('events'). (Voir ce bogue pour plus de détails.) Il est possible d'accéder aux mêmes données avec jQuery._data(elem, 'events'), une structure de données interne, qui n'est pas documentée et donc pas garantie à 100% de rester stable. Cela ne devrait cependant pas être un problème, et la ligne correspondante du code du plugin ci-dessus peut être modifiée comme suit:
var data = jQuery._data(this[0], 'events')[type];
Les événements jQuery sont stockés dans un objet de données appelé events, vous pouvez donc rechercher dans ceci:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) {
button.click(onButtonClicked);
}
Il serait bien sûr préférable que vous puissiez structurer votre application pour que ce code ne soit appelé qu'une seule fois.
Cela pourrait être encapsulé dans un plugin:
$.fn.isBound = function(type, fn) {
var data = this.data('events')[type];
if (data === undefined || data.length === 0) {
return false;
}
return (-1 !== $.inArray(fn, data));
};
Vous pourriez alors appeler:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}