2009-05-05 174 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