子元素单击事件触发父级单击事件
假设你有这样的代码:
<html> <head> </head> <body> <div id="parentDiv" onclick="alert('parentDiv');"> <div id="childDiv" onclick="alert('childDiv');"> </div> </div> </body> </html>
我不想触发parentDiv
点击事件,当我点击childDiv
,我该怎么做?
更新
另外,这两个事件的执行顺序是什么?
你需要使用event.stopPropagation()
现场演示
$('#parentDiv').click(function(event){ event.stopPropagation(); alert(event.target.id); });
event.stopPropagation()
说明:防止事件冒泡DOM树,阻止任何父处理程序被通知事件。
没有jQuery: DEMO
<div id="parentDiv" onclick="alert('parentDiv');"> <div id="childDiv" onclick="alert('childDiv');event.cancelBubble=true;"> AAA </div> </div>
stopPropagation()
方法停止将事件冒泡到父元素,从而阻止任何父处理程序被通知事件。
你可以使用方法event.isPropagationStopped()
来知道这个方法是否曾经被调用(在该事件对象上)。
句法:
以下是使用此方法的简单语法:
event.stopPropagation()
例:
$("div").click(function(event) { alert("This is : " + $(this).prop('id')); // Comment the following to see the difference event.stopPropagation(); });
单击事件泡沫 ,现在什么是冒泡的意思,开始的好点在这里 。 你可以使用event.stopPropagation()
,如果你不希望这个事件应该进一步传播。
在MDN上也是一个很好的链接
我面临同样的问题,并通过这种方法解决。 html:
<div id="parentDiv"> <div id="childDiv"> AAA </div> BBBB </div>
JS:
$(document).ready(function(){ $("#parentDiv").click(function(e){ if(e.target.id=="childDiv"){ childEvent(); } else { parentEvent(); } }); }); function childEvent(){ alert("child event"); } function parentEvent(){ alert("paren event"); }