子元素点击事件触发父点击事件

IT技术 javascript jquery dhtml
2021-03-13 09:20:15

假设你有一些这样的代码:

<html>
  <head>
  </head>
  <body>
     <div id="parentDiv" onclick="alert('parentDiv');">
         <div id="childDiv" onclick="alert('childDiv');">
         </div>   
      </div>
  </body>
</html>

我不想在parentDiv单击 时触发单击事件,我该childDiv怎么做?

更新

另外,这两个事件的执行顺序是什么?

5个回答

您需要使用event.stopPropagation()

现场演示

$('#childDiv').click(function(event){
    event.stopPropagation();
    alert(event.target.id);
});​

event.stopPropagation()

说明:防止事件向上冒泡 DOM 树,防止任何父处理程序收到事件通知。

如果您有 2 个单独的父级单击事件处理程序和子级单击事件处理程序,并且您只想通过子级单击事件触发子级处理程序,则必须在 childDiv 上调用 event.stopPropagation(),而不是在 parentDiv 上调用
2021-05-13 09:20:15

没有 jQuery:演示

 <div id="parentDiv" onclick="alert('parentDiv');">
   <div id="childDiv" onclick="alert('childDiv');event.cancelBubble=true;">
     AAA
   </div>   
</div>
谢谢@Akhil 这对我有用。
2021-05-14 09:20:15

我遇到了同样的问题并通过这种方法解决了它。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");
}

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