有没有办法自动取消绑定在元素上设置的所有“on”事件?我找到了一个解决方案,但我不知道它是否是核心问题。
$(document).off('click', 'li').on('click', 'li', function(e){
e.preventDefault();
// some stuff goes here
});
编辑:
我已经尝试了所有建议的答案但没有按照我想要的方式工作。也许是我的错误,我没有提供足够的信息:关键是我的所有内容都像标签一样动态加载,一些标签可以加载更多时间。
我试过这个$('li')。off()。on('click',function(){ }); - >没用?
也试过这个$('li')。unbind()。on('click',function(){ }); - >没用。
答案 0 :(得分:1)
您可以使用unbind()
或off()
从对象中删除所有事件处理程序。
$('#myNode').unbind();
off()
是在jQuery 1.7+中执行此操作的首选方法(由@ Krishna注明)。
$('#myNode').off();
答案 1 :(得分:1)
您可以在没有参数的情况下调用.unbind()
来执行此操作:
$('li').unbind();
来自the docs:
在最简单的情况下,如果没有参数,
.unbind()
将删除附加到元素的所有处理程序。
从jQuery 1.7开始,off()
和on()
是绑定和取消绑定事件处理程序的首选方法。
因此,要从元素中删除所有处理程序,请使用:
$('li').off();
或针对特定处理程序:
$('p').off('click hover');
要添加或绑定事件处理程序,您可以使用
答案 2 :(得分:1)
$('li').off();//Remove all event handlers from all li elements:
$('li').off('click');//Remove specific event - click
来自文档.off(),
.off()方法删除使用.on()附加的事件处理程序。
来自.unbind()文档,
从jQuery 1.7开始,.on()和.off()方法首选在元素上附加和删除事件处理程序。
$('li').unbind(); //removes all event handlers
$('li').unbind('click');//removes specific event - click