javascript - 如何在 jQuery 中单击子元素不被视为单击其父元素?

标签 javascript jquery

关于如何检测除指定元素以外的任何地方的点击的问题已经回答了几个项目,如下所示:

Event on a click everywhere on the page outside of the specific div

我遇到的问题是试图弄清楚如何检测除给定元素(包括其中一个子元素)以外的任何地方的点击。

例如在这段代码中:

http://jsfiddle.net/K5cEm/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>
$(function() {

$(document).click(function(e) {
   $('#somediv').hide();
});
$('#somediv').click(function(e) {
   e.stopPropagation();
});

});
</script>

<div style="border: 1px solid red; width:100px; height: 100px" id="somediv">

    <span style="display: block; border: 1px solid green; width:50px; height: 50px; margin: 0 auto" id="someSpan"></span>

</div>

点击红色 div 之外的任何地方应该会导致它隐藏。不仅如此,点击它的子元素(绿色跨度)也会导致它隐藏。它不应该隐藏的唯一时间是如果你点击它而不是跨度。就目前而言,对 span 的点击也被视为对父 div 的点击,因此如果点击 span,它不会隐藏 div。

如何实现?

最佳答案

您可以将点击的目标与相关元素进行比较:

$(document).click(function(e) {
    if (e.target != $('#somediv')[0]) {
        $('#somediv').hide();
    }
});

演示:http://jsfiddle.net/K5cEm/7/

关于javascript - 如何在 jQuery 中单击子元素不被视为单击其父元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8498680/

相关文章:

javascript - 显示单元测试的图表

javascript - 使用 npm 作为构建工具无法完成的事情?

javascript - 通过部分坐标查找 DOM 元素

javascript - Jquery - 隐藏点击文件上的任何地方

javascript - 使用 'this' 选择属性,然后与选定的 HTML 属性进行比较

javascript - 当用户将鼠标移动到屏幕/图表上时,自动滚动将暂停。如果鼠标停止移动,自动滚动将再次恢复

jquery - 我可以通过像在 CSS 中那样对它们进行分组来将相同的样式应用于 jQuery 中的两个元素吗?

jquery - 选择没有任何类的元素

jQuery 验证插件条件必填字段

javascript - 对象更新失败后解析回滚