2012-10-22 95 views
6

解除綁定全局ajaxSuccess事件處理程序的麻煩。取消綁定jQuery ajaxSuccess事件

每次運行下面的代碼,然後測試ajax函數時,每次運行代碼時都會調用一次方法鉤子。

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

我也試着只用

$(document).ajaxSuccess(hook); 

,但上面並沒有取代現有的基準掛鉤,並具有與上述相同的行爲。

可能相關的一件事是我使用的是一個非常舊的jQuery版本(1.3.2)。

我確定我有一個明顯的解決方案,我錯過了這裏,但大腦只是今天不工作。任何幫助將不勝感激!

在此先感謝!

回答

5

.unbind()中的第二個參數應該是對當前綁定函數的引用。如果您將變量更改爲指向不同的功能,它將不起作用。

所以,如果你第一次綁定ajaxSuccess一個函數命名hook

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

,然後改變hook,並嘗試解除綁定:

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

這將失敗,因爲hook不再包含參考原始功能。相反,取消綁定你改變之前的hook值:

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

或者,如果這是不可能的,例如,因爲原來hook不再範圍,則可以省略第二個參數刪除所有綁定處理程序:

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

當然,如果你有必然document.ajaxSuccess另一個處理程序,它也將綁定。

+0

感謝您向我解釋,在閱讀您的答案後,解決問題非常簡單。謝謝! –