我有一个编程错误的库正在执行此操作
$(document).on('click','#keep_first_only_button', function(){
在此之后,我写了一段代码来“覆盖”这种不良行为
$("keep_first_only_button").unbind("click");
$("keep_first_only_button").on("click", selectKeepFirstOfAll);
但这不起作用,然后再次触发document.click函数处理程序
我无法取消绑定文档中的所有点击事件,因为灾难会在页面中发生。
在这种情况下,哪种方法正确?
编辑:抱歉时间丢失问题,我没有在选择器中看到缺少的'#'。我很抱歉!
答案 0 :(得分:25)
原始事件处理程序被绑定为委派的事件,因此您无法将其从$('#keep_first_only_button')
本身中删除。您需要在document
级别删除它。
要删除特定的委派事件处理程序,请提供
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);