2012-12-28 30 views
20

thể trùng lặp:
test if event handler is bound to an element in jQueryCách kiểm tra xem phần tử có trình xử lý nhấp chuột phải không?

Cố gắng làm như sau (liên kết là jQuery đối tượng của 'a' tag):

link.data("events") //undefined even if link has event handlers 
jQuery.data(link, 'events') //undefined always also 
jQuery._data(link, 'events') //undefined always also 

sử dụng jquery-1.8.3

Vì vậy, cách kiểm tra xem phần tử có trình xử lý nhấp chuột phải không?

+4

Bạn đã chỉ định trình xử lý nhấp chuột như thế nào? – AmShaegar

+1

bạn có chắc là liên kết được chọn đúng cách – NimChimpsky

+0

Trình xử lý được gán với liên kết.nhấp vào (... một số hàm ...) nhiều lần, vì tôi không thể kiểm tra xem nó đã tồn tại chưa. Và để xử lý được thực hiện nhiều lần – kostepanych

Trả lời

34

Bạn có thể sử dụng jQuery._data để kiểm tra sự kiện. Đối số đầu tiên phải là tham chiếu đến phần tử HTML, không phải là đối tượng jQuery.

var ev = $._data(element, 'events'); 
if(ev && ev.click) alert('click bound'); 

Ví dụ bên dưới.

$(function(){ 
 
    $('#test').click(function(){ 
 
     // NOTE: this below is refering to the HTML element, NOT the jQuery element 
 
     var ev = $._data(this, 'events'); 
 
     if(ev && ev.click) alert('click bound to this button'); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<button id="test">Click me to check for click handlers</button>

Cũng lưu ý rằng phương pháp này cho các sự kiện kiểm tra sẽ chỉ làm việc khi sự kiện này được ràng buộc qua jQuery. Nếu sự kiện bị ràng buộc qua element.attachEventListener, element.onclick, <a onclick="doStuff()"> hoặc bất kỳ cách nào khác không phải jQuery, điều này sẽ không hoạt động. Nếu bạn thích hợp với chiếc thuyền này, hãy kiểm tra this answer.

+0

@Blossoming_Flower Bạn có thể xây dựng? Điều này làm việc cho tôi trên các phiên bản jQuery 2.1.3 và 1.11.0. – Snuffleupagus

+0

Lời xin lỗi của tôi, đó là lỗi của tôi. Tôi đã xóa nhận xét của mình. –

+0

@ Ionian316 'undefined == false' vì vậy' if (ev && ev.click) 'thực hiện điều tương tự. – Snuffleupagus

Các vấn đề liên quan