Оновлення 24 серпня '12 : У 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);
}