16

我有一个编程错误的库正在这样做

$(document).on('click','#keep_first_only_button', function(){

在此之后,我写了一段代码来“覆盖”这种不良行为

$("keep_first_only_button").unbind("click");
$("keep_first_only_button").on("click", selectKeepFirstOfAll);

但是这不起作用,然后再次触发 document.click 函数处理程序

我无法从文档中解除所有点击事件的绑定,因为页面中会发生灾难。

在这种情况下,哪种方法是正确的?

编辑:对不起,我没有在我的选择器中看到丢失的“#”。我真的很抱歉 !

4

4 回答 4

31

原始事件处理程序被绑定为委托事件,因此您无法将其从$('#keep_first_only_button')自身中删除。您需要在document关卡上将其删除。

文档中

要删除特定的委托事件处理程序,请提供一个selector 参数。.on()选择器字符串必须与附加事件处理程序时传递给的字符串完全匹配 。要从元素中移除所有委托事件而不移除非委托事件,请使用特殊值"**"

换句话说,要取消绑定委托事件,您应该只使用绑定它们时使用的相同参数集,但将它们传递给它们off。由于绑定函数是匿名的,因此您无法引用它,因此您必须解除绑定绑定到该级别的所有委托事件处理程序:#keep_first_only_buttondocument

$(document).off('click', '#keep_first_only_button');

编辑:看起来问题只是缺少哈希。奇怪,我认为您无法使用常规 .off()调用取消绑定委托事件处理程序...

于 2013-06-06T14:06:02.127 回答
7
$("#keep_first_only_button")...

缺少哈希?

于 2013-06-06T13:58:46.367 回答
5

对于任何想知道...Mattias Buelens 是正确的人。

如果你有像这样绑定的元素

$(document).on("click","#element",function(){ });

并且想要稍后将其关闭,您必须这样做:

 $("#element").click(function(e) { 
    $(document).off('click', '#element'); 
});
于 2017-07-12T18:57:38.513 回答
0

如果您想删除事件而不考虑使用选择器

$(document).off("点击","**");

于 2017-11-14T10:09:33.517 回答