Обновление 24 августа 2012 г . : в jQuery 1.8 больше невозможно получить доступ к событиям элемента с помощью .data('events'). (Подробнее см. В этой ошибке .) Можно получить доступ к тем же данным с jQuery._data(elem, 'events')помощью внутренней структуры данных, которая недокументирована и, следовательно, не на 100% гарантирует стабильность. Однако это не должно быть проблемой, и соответствующую строку кода плагина выше можно изменить на следующее:
var data = jQuery._data(this[0], 'events')[type];
События jQuery хранятся в названном объекте данных events, поэтому вы можете искать в нем:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) {
button.click(onButtonClicked);
}
Конечно, было бы лучше, если бы вы могли структурировать свое приложение так, чтобы этот код вызывался только один раз.
Это может быть инкапсулировано в плагин:
$.fn.isBound = function(type, fn) {
var data = this.data('events')[type];
if (data === undefined || data.length === 0) {
return false;
}
return (-1 !== $.inArray(fn, data));
};
Затем вы можете позвонить:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}