2009-05-05 171 views
102

我遇到問題。基本上,當用戶點擊在網頁上的「編輯」鏈接,以下Jquery的代碼運行:如何刪除Jquery中的所有Click事件處理程序

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

通過這樣做,保存按鈕的onClick事件調用saveQuestion()方法和傳遞的標識問題,點擊「編輯」鏈接。

但是,如果在同一個會話的用戶點擊2個問題的編輯,然後,而不是覆蓋以前click事件處理程序,它反而使2個事件處理程序的運行,其中一個可以稱之爲saveQuestion(1)和其他可以稱之爲saveQuestion(2)。通過這樣做1個問題覆蓋另一個問題。

有沒有辦法刪除已經分配給按鈕的所有以前的click事件?

回答

179

你會使用off()刪除的事件,像這樣:

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

但這將刪除綁定到該元素的所有點擊事件。如果帶有SaveQuestion的函數是唯一綁定的事件,那麼上面就會這樣做。如果不能做到以下幾點:

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

因爲jQuery的1.7,你應該可以建議這個應該怎麼寫,而不是使用和關閉,而不是綁定和取消綁定 – 2012-07-27 15:08:03

+0

@LockTar? – 2012-11-15 12:40:52

13

有沒有辦法刪除已分配給按鈕的所有以前的點擊事件?

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

如果您使用...

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

...然後它會更容易稍後解除綁定。

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

使用jQuery的offon