2012-10-22 31 views
6

Gặp sự cố khi hủy xử lý sự kiện ajaxSuccess toàn cầu.Unbind jQuery sự kiện ajaxSuccess

Mỗi khi tôi chạy đoạn mã sau và sau đó kiểm tra hàm ajax, móc phương thức được gọi một lần cho mỗi lần tôi chạy mã.

var hook = function() { console.log('hey'); }; 
$(document).unbind('ajaxSuccess', hook); // not working 
$(document).bind('ajaxSuccess', hook); 

Tôi cũng đã cố gắng chỉ sử dụng

$(document).ajaxSuccess(hook); 

nhưng ở trên không thay thế các tài liệu tham khảo hiện có để treo và có hành vi tương tự như trên.

Một điều có thể liên quan là tôi đang sử dụng phiên bản jQuery cũ (1.3.2).

Tôi chắc chắn có một giải pháp rõ ràng mà tôi thiếu ở đây, nhưng bộ não không hoạt động ngay hôm nay. Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào!

Cảm ơn trước!

Trả lời

5

Đối số thứ hai trong .unbind() phải là tham chiếu đến hàm hiện bị ràng buộc. Nếu bạn thay đổi biến để trỏ đến một hàm khác, nó sẽ không hoạt động.

Vì vậy, nếu bạn lần đầu tiên ràng buộc ajaxSuccess đến một hàm có tên hook:

var hook = function() { console.log("a"); }; 
$(document).bind("ajaxSuccess", hook); 

Và sau đó thay đổi hook và cố gắng để unbind nó:

hook = function() { console.log("b"); }; 
$(document).unbind("ajaxSuccess", hook); 
$(document).bind("ajaxSuccess", hook); 

này sẽ thất bại vì hook không còn chứa một tham chiếu đến hàm ban đầu. Thay vào đó, unbind trước khi bạn thay đổi giá trị của hook:

$(document).unbind("ajaxSuccess", hook); 
hook = function() { console.log("b"); }; 
$(document).bind("ajaxSuccess", hook); 

Hoặc, nếu đó là không thể, ví dụ, bởi vì bản gốc hook không còn trong phạm vi, bạn có thể bỏ qua tham số thứ hai để loại bỏ tất cả xử lý ràng buộc :

$(document).unbind("ajaxSuccess"); 

Tất nhiên, nếu bạn có một trình xử lý khác bị ràng buộc là document.ajaxSuccess, nó cũng sẽ bị hủy.

+0

Cảm ơn bạn đã giải thích rằng với tôi, sau khi đọc câu trả lời của bạn, việc sửa lỗi này rất đơn giản. Cảm ơn! –

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