如何删除Jquery中的所有Click事件处理程序

我有一个问题。 基本上,当用户点击页面上的“编辑”链接时,以下Jquery代码将运行:

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

通过这样做,savebutton的onClick事件调用saveQuestion()方法并传递点击了“编辑”链接的问题的ID。

但是如果在同一个会话中用户点击了两个问题的编辑,而不是覆盖以前的click事件处理程序,而是导致两个事件处理程序运行,一个可能调用saveQuestion(1) ,另一个可能调用saveQuestion(2) 。 通过这样做1个问题覆盖另一个问题。

有没有办法删除所有已经分配给button的click事件?

你可以使用off()来移除一个像这样的事件:

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

但是这将删除所有绑定到这个元素的点击事件 。 如果带有SaveQuestion的函数是唯一绑定的事件,那么上面就会这样做。 如果不这样做:

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

有没有办法删除所有已经分配给button的点击事件?

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

如果你使用…

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

…以后再解绑更容易

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

使用jQuery的closures