Aktualizacja 24 sierpnia '12 : W jQuery 1.8 nie można już uzyskać dostępu do zdarzeń elementu za pomocą .data('events'). (Zobacz ten błąd, aby uzyskać szczegółowe informacje.) Możliwe jest uzyskanie dostępu do tych samych danych za jQuery._data(elem, 'events')pomocą wewnętrznej struktury danych, która jest nieudokumentowana, a zatem nie gwarantuje 100% stabilności. Nie powinno to jednak stanowić problemu, a odpowiedni wiersz powyższego kodu wtyczki można zmienić na następujący:
var data = jQuery._data(this[0], 'events')[type];
Zdarzenia jQuery są przechowywane w obiekcie danych o nazwie events, więc możesz szukać w tym:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) {
button.click(onButtonClicked);
}
Oczywiście najlepiej byłoby, gdybyś mógł ustrukturyzować swoją aplikację, tak aby ten kod był wywoływany tylko raz.
Można to umieścić we wtyczce:
$.fn.isBound = function(type, fn) {
var data = this.data('events')[type];
if (data === undefined || data.length === 0) {
return false;
}
return (-1 !== $.inArray(fn, data));
};
Możesz wtedy zadzwonić:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}