javascript - 即使单击具有 stopPropagation 的元素,也会在所有单击事件中隐藏元素

标签 javascript jquery

我有一个元素,我需要在点击页面上的任何地方时隐藏它,即使是在具有 e.stopPropagation() 的元素上也是如此。

我试过了

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

哪个有效但不适用于具有以下内容的元素:

$(document).on("click","#someDiv",function(e){
    e.stopPropagation();
});

如何在不删除 stopPropagation 的情况下隐藏我的元素甚至在 #someDiv 上。我需要它具有灵 active 的原因是我正在编写一个任何人都可以使用的插件,并且不会知道有关页面上的点击事件或元素 ID 的任何信息。

有没有一种方法可以将元素的隐藏绑定(bind)到所有点击?对 JS 或 jQuery 解决方案感到满意。

我知道这一定是可能的,因为我已经看到其他插件这样做了。

提前感谢您的任何建议!

最佳答案

可能与现有代码最快捷、最兼容的解决方案是换掉 #mydiv 隐藏监听器以使用 vanilla JS addEventListener利用 useCapture 可选的第三个参数在任何内部元素有机会触发自己的监听器之前获取事件。在下面的代码片段中查看实际效果:

document.addEventListener("click",function(){
    $("#mydiv").hide();
}, true);

$("#someDiv").on("click",function(e){
    console.log('some div clicked!');
    e.stopPropagation();
});
.container {
  height: 100vh;
  width: 100vw;
  background-color: pink;
}

#mydiv {
  background-color: cyan;
}

#someDiv {
  background-color: lavender;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
  <div id="mydiv">Hide me!</div>
  <div id="someDiv">I'll stop propagation!</div>
</div>

关于javascript - 即使单击具有 stopPropagation 的元素,也会在所有单击事件中隐藏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469283/

相关文章:

javascript - 单击按钮时加载现有页面/表单作为模式

javascript - 检测滚动 - 滚动到 div

php - 检测和编辑外部链接

javascript - Jquery从表中删除项目

javascript - attachEvent/addEventListener 到 Window onload/load - 首选方式

javascript - 将mysql查询返回的数据转换为json(基于树)

javascript - php:更改密码和插入当前密码的表单

javascript - 单击 div 的监听器但不是链接

javascript - 捕获多个 "onkeydown"并等待 "onkeyup"执行

javascript - 如何在一次加载中加载多个谷歌图表,因为谷歌图表只允许加载一个包