jQuery:如何解除绑定到文档对象的事件?

时间:2013-06-06 13:56:36

标签: javascript jquery events

我有一个编程错误的库正在执行此操作

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

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

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

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

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

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

编辑:抱歉时间丢失问题,我没有在选择器中看到缺少的'#'。我很抱歉!

4 个答案:

答案 0 :(得分:25)

原始事件处理程序被绑定为委派的事件,因此您无法将其从$('#keep_first_only_button')本身中删除。您需要在document级别删除它。

来自the documentation

  

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

换句话说,要取消绑定委托事件,您应该使用您用来绑定它们的相同参数集,而是将它们传递给off。由于绑定函数是匿名的,因此您无法引用它,因此您必须解决绑定到#keep_first_only_button级别document上的所有所有委派事件处理程序:< / p>

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

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

答案 1 :(得分:7)

$("#keep_first_only_button")...

缺少哈希?

答案 2 :(得分:5)

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

如果您的元素绑定为

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

想要以后关闭它,你必须这样做:

 $("#element").click(function(e) { 
    $(document).off('click', '#element'); 
});

答案 3 :(得分:0)

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

(文档)$ .off(&#34;单击&#34;&#34; **&#34);