这是我的code:
<div id="container">
<div id="box">
Content
</div>
</div>
#container
{
position:relative;
width:400px;
height:400px;
background-color:red;
}
#box
{
position:absolute;
width:200px;
height:200px;
top:100px;
left:100px;
background-color:blue;
}
$('#container:not(#box)').click(function (e) {
e.preventDefault();
$('#container').fadeOut(300);
});
我想fadeOut
只点击父级(红色div)。如果我点击蓝色(孩子),就不会发生任何事情。我怎么能用jQuery做到这一点?试过:not
,但似乎这不是正确的解决方案...
答案 0 :(得分:6)
您需要做的就是检查事件源自(e.target
)的元素是#container
(this
):
$('#container').click(function (e) {
if (e.target === this) {
$('#container').fadeOut(300);
}
});
答案 1 :(得分:3)
当您点击#box
时,click
事件也会在父#container
元素上注册,因为事件会冒泡。
有两种方法可以防止这种情况发生。
首先是阻止冒泡发生。您可以通过在e.stopPropagation()
点击处理程序上调用#box
来执行此操作。但是,当然,你没有#box
事件处理程序,所以下一个更具吸引力。
其次是从#container
事件处理程序检查您是否点击了实际的#container
或某个孩子,并且事件刚刚冒出来。您可以通过检查e.target
元素并将其与this
事件处理程序中的#container
进行比较来执行此操作。
答案 2 :(得分:0)
$('#container').click(function () {
$('#container').fadeOut(300);
});
$('#box').click(function (e) {
e.stopPropagation()
});