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

IT技术 javascript jquery click
2021-02-26 18:50:57

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

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

通过这样做,保存按钮的 onClick 事件会调用该saveQuestion()方法并传递单击“编辑”链接的问题的 ID。

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

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

5个回答

您可以使用off()删除这样的事件:

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

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

$("#saveBtn").off("click").click(function() { saveQuestion(id); });
@JohnMagnolia 查看我上面的更改。
2021-05-02 18:50:57
.addAttr('onclick'); 或 .removeAttr('onclick');
2021-05-03 18:50:57
从 jQuery 1.7 开始,你应该使用 on 和 off 而不是 bind 和 unbind
2021-05-10 18:50:57
@LockTar 你能建议如何写这个吗?
2021-05-10 18:50:57

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

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)});
unbind()从 jQuery 3.0 开始弃用,off()从 1.7 开始鼓励使用
2021-05-04 18:50:57
$('#saveBtn').off('click').click(function(){saveQuestion(id)});

如果你用...

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

……那以后解绑就容易多了。

如果您解除所有点击事件的绑定,则没有什么不同。但是,如果您只想解除一个特定操作的绑定,我不想在两个地方重写该事件。正如你所说,如果我想稍后重新绑定它,那又更容易了,因为我不必第三次编写该函数。
2021-04-27 18:50:57
你怎么算?无论元素的事件如何绑定,它们总是可以以相同的方式解除绑定... $('#saveBtn').unbind('whatever event(s)'); 现在,重新绑定……是的,在某些情况下,您的技术可能更容易。
2021-05-07 18:50:57
$('#saveBtn').off('click').on('click',function(){
   saveQuestion(id)
});

使用 jquery 的关闭开启