2009-05-05 34 views
102

Tôi đang gặp sự cố. Về cơ bản, khi người dùng nhấp vào 'Chỉnh sửa' liên kết trên một trang, mã jquery sau chạy:Cách xóa tất cả trình xử lý sự kiện nhấp trong Jquery

$("#saveBtn").click(function() { 
    saveQuestion(id); 
}); 

Bằng cách này, sự kiện onClick của nút lưu gọi phương thức saveQuestion() và chuyển vào ID của câu hỏi mà liên kết 'Chỉnh sửa' được nhấp vào.

Nhưng nếu trong cùng một phiên, người dùng nhấp vào chỉnh sửa trên 2 câu hỏi, thay vì ghi đè lên bộ xử lý sự kiện click trước đó, nó sẽ làm 2 trình xử lý sự kiện chạy, một trình xử lý có thể gọi saveQuestion(1) và người kia có thể gọi saveQuestion(2). Bằng cách làm 1 câu hỏi này sẽ ghi đè lên câu hỏi khác.

Có cách nào để xóa tất cả các sự kiện click trước đó đã được gán cho một nút không?

Trả lời

179

Bạn sẽ sử dụng off() để loại bỏ một sự kiện như vậy:

$("#saveBtn").off("click"); 

nhưng điều này sẽ loại bỏ tất cả các sự kiện nhấp chuột ràng buộc để yếu tố này. Nếu chức năng với SaveQuestion là sự kiện duy nhất bị ràng buộc thì ở trên sẽ làm điều đó. Nếu không làm như sau:

$("#saveBtn").off("click").click(function() { saveQuestion(id); }); 
+29

Kể từ jQuery 1.7, bạn nên sử dụng và tắt thay vì ràng buộc và unbind –

+0

@LockTar bạn có thể gợi ý cách này nên được viết để thay thế? –

+0

@JohnMagnolia Xem các thay đổi của tôi ở trên. –

13

Có cách nào để xóa tất cả các sự kiện nhấp chuột trước đó đã được gán cho một nút không?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)}); 
2

Nếu bạn sử dụng ...

$(function(){ 
    function myFunc() { 
     // ... do something ... 
    }; 
    $('#saveBtn').click(myFunc); 
}); 

... sau đó nó sẽ được dễ dàng hơn để unbind sau.

+1

Bạn hình dung như thế nào? Không có vấn đề làm thế nào một sự kiện của phần tử bị ràng buộc, họ luôn luôn có thể được unbound theo cùng một cách ... $ ('# saveBtn'). Unbind ('bất cứ sự kiện (s)'); Bây giờ, để RE-BIND ... có, kỹ thuật của bạn có thể dễ dàng hơn trong một số trường hợp. – KyleFarris

+1

Nếu bạn hủy liên kết tất cả các sự kiện nhấp, thì không có sự kiện nào khác. Nhưng nếu bạn chỉ muốn unbind một hành động cụ thể, tôi sẽ không muốn viết lại sự kiện đó ở hai nơi. Và như bạn đã nói, nếu tôi muốn rebind nó sau này, đó là một lần nữa dễ dàng hơn để làm, bởi vì tôi không phải viết các chức năng một lần thứ ba. –

6
$('#saveBtn').off('click').click(function(){saveQuestion(id)}); 
0
$('#saveBtn').off('click').on('click',function(){ 
    saveQuestion(id) 
}); 

Sử dụng jquery của offon

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