如何使用jQuery删除所有点击事件处理程序?


121

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

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

通过执行此操作,保存按钮的onClick事件将调用该saveQuestion()方法,并传递单击了“编辑”链接的问题的ID。

但是,如果用户在同一会话中单击对2个问题的编辑,则不是覆盖先前的click事件处理程序,而是使2个事件处理程序运行,一个可以调用 saveQuestion(1),另一个可以调用saveQuestion(2)。通过这样做,第一个问题将覆盖另一个问题。

有没有办法删除click已分配给按钮的所有先前事件?

Answers:


202

您可以使用off()删除事件,如下所示:

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

但这会删除与此元素绑定的所有点击事件。如果带有SaveQuestion的函数是唯一的事件绑定,那么上面的函数将做到。如果没有,请执行以下操作:

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

31
从jQuery 1.7开始,您应该使用on和off而不是bind和unbind
Ralph Jansen

@LockTar您可以建议如何写吗?
约翰·木兰

@JohnMagnolia请参阅上面的更改。
拉尔夫·詹森

1
.addAttr('onclick'); 或.removeAttr('onclick');
阿里提

13

有没有办法删除已分配给按钮的所有以前的单击事件?

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

unbind()从jQuery 3.0开始不推荐使用,off()从1.7开始鼓励使用。
Skylar Ittner

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

2

如果您使用过...

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

...那么以后解除绑定会更容易。


1
你如何看待?无论元素的事件如何绑定,都可以始终以相同的方式取消绑定... $('#saveBtn')。unbind('whatever event(s)'); 现在,重新绑定...是的,在某些情况下,您的技术可能会更容易。
KyleFarris,2009年

1
如果取消绑定所有单击事件,则没有什么不同。但是,如果您只想取消某个特定动作的绑定,则我不想在两个地方重写该事件。正如您所说,如果我以后想重新绑定它,那再容易些,因为我不必第三次编写该函数。
贾勒特·迈尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.