Update 24. August '12 : In jQuery 1.8 ist es nicht mehr möglich, mit auf die Ereignisse des Elements zuzugreifen .data('events'). ( Einzelheiten finden Sie in diesem Fehler .) Es ist möglich, mit jQuery._data(elem, 'events')einer internen Datenstruktur auf dieselben Daten zuzugreifen , die nicht dokumentiert ist und daher nicht zu 100% garantiert stabil bleibt. Dies sollte jedoch kein Problem sein, und die entsprechende Zeile des obigen Plugin-Codes kann wie folgt geändert werden:
var data = jQuery._data(this[0], 'events')[type];
jQuery-Ereignisse werden in einem Datenobjekt namens aufgerufen events, sodass Sie folgendermaßen suchen können:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) {
button.click(onButtonClicked);
}
Es wäre natürlich am besten, wenn Sie Ihre Anwendung so strukturieren könnten, dass dieser Code nur einmal aufgerufen wird.
Dies könnte in ein Plugin eingekapselt werden:
$.fn.isBound = function(type, fn) {
var data = this.data('events')[type];
if (data === undefined || data.length === 0) {
return false;
}
return (-1 !== $.inArray(fn, data));
};
Sie könnten dann anrufen:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}