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);
}