Cập nhật ngày 24 tháng 8 năm 12 : Trong jQuery 1.8, không thể truy cập các sự kiện của phần tử bằng cách sử dụng .data('events')
. (Xem lỗi này để biết chi tiết.) Có thể truy cập cùng một dữ liệu với jQuery._data(elem, 'events')
, cấu trúc dữ liệu nội bộ, không có giấy tờ và do đó không được đảm bảo 100% để duy trì ổn định. Tuy nhiên, đây không phải là một vấn đề và dòng mã plugin có liên quan ở trên có thể được thay đổi thành như sau:
var data = jQuery._data(this[0], 'events')[type];
Các sự kiện jQuery được lưu trữ trong một đối tượng dữ liệu được gọi events
, vì vậy bạn có thể tìm kiếm trong này:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) {
button.click(onButtonClicked);
}
Tất nhiên, sẽ là tốt nhất nếu bạn có thể cấu trúc ứng dụng của mình để mã này chỉ được gọi một lần.
Điều này có thể được gói gọn trong một 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));
};
Sau đó bạn có thể gọi:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}