问题描述
说我们有
<div id="parent">d1
<div id="child-1">child-1</div>
<div id="child-2">child-2</div>
</div>
我在child-2
上有一个事件监听器。
据我了解,事件捕获将沿着节点树进行下去,直到到达事件触发的节点为止。
事件捕获是否还会通过同级孩子,检查他们是否是触发事件的目标?
解决方法
如您在本摘要中所看到的,如果单击child1的第一个父级,则child1被触发。
如果您检查控制台,您将看到两个e.target
相同,因此该事件将针对父级和子级上的相同元素。
单击child1时:事件从父级转到child1,child2事件从不触发
const parent= document.getElementById('parent');
const child1 = document.getElementById('child1');
const child2 = document.getElementById('child2');
parent.addEventListener(
'click',e => {
console.log("parent")
console.log(e.target)
},true
);
child1.addEventListener(
'click',e => {
console.log("child1")
console.log(e.target);
},true
);
child2.addEventListener(
'click',e => {
console.log("child2")
console.log(e.target);
},true
);
.parent{
width: 500px;
height: 500px;
background-color: orange;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<title>Expense Tracker</title>
</head>
<body>
<h1>Event Capturing</h1>
<div class="parent" id="parent">
<h2 id="child1">Child1</h2>
<h3 id="child2">Child2</h3>
</div>
</body>
</html>