Javascript 如何解除元素内所有事件的绑定

Javascript 如何解除元素内所有事件的绑定,javascript,jquery,html,events,dom-events,Javascript,Jquery,Html,Events,Dom Events,我正在尝试解除绑定/关闭一个元素中每个元素的所有事件。我试过这个解决方案,但不起作用。唯一有效的方法是$(document).add('*').off()但这不是我需要的 我举了一个简短的例子,但是有更多的元素和事件 为什么它不能使用此代码 $(文档).ready(函数(){ $(文档)。在(“单击”、“#contentWithEvents按钮”上,函数(){ 控制台日志(“单击”); }); $(document).on(“mouseenter”,“contentWithEvents li

我正在尝试
解除绑定
/
关闭
一个元素中每个元素的所有事件。我试过这个解决方案,但不起作用。唯一有效的方法是
$(document).add('*').off()但这不是我需要的

我举了一个简短的例子,但是有更多的元素和事件
为什么它不能使用此代码

$(文档).ready(函数(){
$(文档)。在(“单击”、“#contentWithEvents按钮”上,函数(){
控制台日志(“单击”);
});
$(document).on(“mouseenter”,“contentWithEvents li div”,function(){
控制台日志(“悬停”);
});
$(文档)。在(“单击”上,“解除绑定”,函数(){
ContentToBereplace=$(“#contentWithEvents”);
contentToBereplace.find(“*”).each(函数(){
$(this.off();
});
});
});

点击事件
点击事件
点击事件
  • 悬停事件
  • 悬停事件
解除所有事件的绑定
为什么不使用包含父id和元素类型的选择器直接委派元素,而不是使用
$(文档)
委派文档事件。这将有助于使用(特定事件:
.off('mouseenter')
或所有事件:
.off()
)解除这些元素的事件绑定

$(文档).ready(函数(){
$(“#contentWithEvents按钮”)。在(“单击”,函数(){
控制台日志(“单击”);
});
$(“#contentWithEvents li div”)。在(“mouseenter”,function()上{
控制台日志(“悬停”);
});
$(“#解除绑定”)。在(“单击”,函数(){
ContentToBereplace=$(“#contentWithEvents”);
contentToBeReplace.find(“*”).off();
});
});

点击事件
点击事件
点击事件
  • 悬停事件
  • 悬停事件
解除所有事件的绑定
似乎最好的方法是委托类选择器,然后在您不想再响应事件时删除该类

我还删除了主按钮和按钮上的委托,因为它们有一个ID。 如果它们是动态生成的,则需要从最近的静态容器中委派它们

$(文档).ready(函数(){
$(“#contentWithEvents”)。在(“单击”,“委派”,函数()上){
控制台日志(“单击”);
});
$(“#contentWithEvents”)。在(“mouseenter”,“deletate”,function()上{
控制台日志(“悬停”);
});
$(“#解除绑定”)。在(“单击”,函数(){
$(“#contentWithEvents.delegated”).removeClass(“delegated”);
});
});

点击事件
点击事件
点击事件
  • 悬停事件
  • 悬停事件
解除所有事件的绑定
很简单,实际上您只是以错误的方式使用了.off()命令

$(文档).ready(函数(){
$(文档)。在(“单击”、“#contentWithEvents按钮”上,函数(){
控制台日志(“单击”);
});
$(document).on(“mouseenter”,“contentWithEvents li div”,function(){
控制台日志(“悬停”);
});
$(文档)。在(“单击”上,“解除绑定”,函数(){
$(文档).off(“单击”,“内容与事件按钮”);
$(document).off(“mouseenter”,“contentWithEvents li div”);
});
});

点击事件
点击事件
点击事件
  • 悬停事件
  • 悬停事件
解除所有事件的绑定
因为它是委托的。所以您在文档上委托,但在元素上解除绑定