rea*_*ebo 14 javascript jquery events
我有一个编程错误的库正在这样做
$(document).on('click','#keep_first_only_button', function(){
Run Code Online (Sandbox Code Playgroud)
在此之后,我写了一段代码来"覆盖"这种不良行为
$("keep_first_only_button").unbind("click");
$("keep_first_only_button").on("click", selectKeepFirstOfAll);
Run Code Online (Sandbox Code Playgroud)
但这不起作用,然后再次触发document.click函数处理程序
我无法取消绑定文档中的所有点击事件,因为灾难将在页面中发生.
在这种情况下,哪种方法正确?
编辑:抱歉时间丢失问题,我没有在选择器中看到缺少的'#'.我真的很抱歉 !
Mat*_*ens 26
原始事件处理程序被绑定为委托事件,因此您无法将其从$('#keep_first_only_button')自身中删除.您需要在document关卡中删除它.
从文档:
要删除特定的委托事件处理程序,请提供
selector参数.选择器字符串必须与.on()附加事件处理程序时传递给的字符串完全匹配 .要在不删除非委派事件的情况下从元素中删除所有委派事件,请使用特殊值"**".
换句话说,要解除委托事件的绑定,您应该使用您用来绑定它们的相同参数集,而是将它们传递给它们off.由于绑定函数是匿名的,因此您无法引用它,因此您必须解决绑定在该级别上的所有委托事件处理程序:#keep_first_only_buttondocument
$(document).off('click', '#keep_first_only_button');
Run Code Online (Sandbox Code Playgroud)
编辑:看起来问题只是缺少哈希.奇怪的是,我以为你无法使用常规 .off()电话解除委托事件处理程序的绑定...
对于任何想知道的人...... Mattias Buelens是对的.
如果你有像这样绑定的元素
$(document).on("click","#element",function(){ });
Run Code Online (Sandbox Code Playgroud)
并希望以后关闭它,你必须这样做:
$("#element").click(function(e) {
$(document).off('click', '#element');
});
Run Code Online (Sandbox Code Playgroud)