**问题类型:**事件冒泡的问题
**问题情景:**在一个元素中获得他的事件源,并且获得该事件源的属性,结果该属性显示未定义
-
首先我们先来看一下事件冒泡的问题
事件冒泡指的是,在父子元素中,都含有同类型的事件,此时,事件的响应顺序是从子元素开始发生的
如:我们只想实现触发子元素时,响应某种事件
流程:1.子元素被单击,事件执行完毕
2.查看该子元素的父元素是否有单击事件,如果有则执行,并且依次向上
<!doctypt>
<html>
<head>
<meta charset="utf-8">
<title>事件冒泡和事件捕获</title>
</head>
<body>
<div id="father">
父元素
<div id="son">
子元素
<div id="son-son">
子元素的子元素
</div>
</div>
</div>
</body>
<script type="text/javascript">
let father = document.getElementById("father")
let son = document.getElementById("son")
let son_son = document.getElementById("son-son")
father.onclick = function(e){
console.log("父元素")
}
son.onclick = function(e){
console.log("子元素")
}
son_son.onclick = function(e){
console.log("子元素的子元素")
}
</script>
</html>
当我们单击“子元素的子元素”时,控制台的执行顺序时:
子元素的子元素
子元素
父元素
解决方案:为该事件添加
e.stopPropagation()
**【小结】**这个问题比较简单,上面只是复习一下,接下来的问题是我今天编写案例时遇到的问题
案例需求:单击事件,获得事件源
我的处理方法是:event.target
但是,问题是在我单击到含有子元素的区域时,他的事件源成为了该子元素节点,因此有时候,所需要的属性是未定义,从而导致报错
解决方案:在打印event时,出现一个currentTarget节点,该节点和target节点用法相同,不过前者指的是绑定响应事件的父节点,后者指定是,鼠标单击的区域节点(因此该target是跟随鼠标来决定的)信息