我想知道如何在触发父 onclick 事件的同时停止子 onclick 事件。例如下面的结构:
<div id="parent">
<div id="child1"></div>
<div id="child2"></div>
<div id="child3"></div>
</div>
例如,如果我单击“child1”,则不会触发“child1”的 onclick 事件,但仍会触发“parent”的 onclick 事件。
非常感谢!
我想知道如何在触发父 onclick 事件的同时停止子 onclick 事件。例如下面的结构:
<div id="parent">
<div id="child1"></div>
<div id="child2"></div>
<div id="child3"></div>
</div>
例如,如果我单击“child1”,则不会触发“child1”的 onclick 事件,但仍会触发“parent”的 onclick 事件。
非常感谢!
最简单的方法是取消绑定孩子的事件处理程序。
$('#child1').unbind('click');
这是上述问题的解决方案箱。请检查一次演示链接。
演示: http ://codebins.com/bin/4ldqp7l
HTML
<div id="parent">
<div id="child1">
Child-1
</div>
<div id="child2">
Child-2
</div>
<div id="child3">
Child-3
</div>
</div>
jQuery
$(function() {
$("#parent").click(function() {
alert("Parent has been clicked too...!");
});
$("#child1").click(function(e) {
e.stopPropagation();
alert("Child-1 has been clicked...!");
});
$("#child2").click(function() {
alert("Child-2 has been clicked...!");
});
$("#child3").click(function() {
alert("Child-3 has been clicked...!");
});
});
CSS
#parent{
padding:5px;
background:#a34477;
width:140px;
text-align:center;
padding:10px;
}
#parent div{
border:1px solid #2211a4;
background:#a3a5dc;
width:100px;
text-align:center;
font-size:14px;
margin-left:10px;
margin-top:3px;
}
您可以将其传递click
给父母吗?
$('.child1').click(function(e){
e.preventDefault();
$(this).parent('#parent').trigger('click');
});
当您点击 .child1 时,它将阻止默认操作,然后触发对child1
id 为 #parent 的父级的点击。
实际上 - 可能忽略上述内容 - 根据下面的评论,它可能会导致冒泡。您真正需要做的就是使用e.stopPropagation();
.
我创建了一个jsfiddle,展示了虽然child1
它绑定了一个 click 函数,但它被忽略了,所以父点击只是被拾取。
你的意思是:
$('#parent').on('click', function(e) {
if( e.target !== this ) {
return;
}
});