事件冒泡
这还得从事件流说起,事件流描述的是从页面中接收事件的顺序,事件冒泡是 IE 的事件流(Netscape 用的是事件捕获流)。
事件冒泡指的是,事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点。
所有现代浏览器都支持事件冒泡,但是 IE5.5 及更早版本会跳过 html 根元素,其他则一直冒泡到 window 对象。
事件冒泡的好处就是可以集中处理事件。
例子:
<style>
#outSide {
width: 100px;
height: 100px;
background: #000;
padding: 50px;
}
#inSide {
width: 100px;
height: 100px;
background: #ccc;
}
</style>
<div id="outSide">
<div id="inSide"></div>
</div>
<script>
let eventHandle = (e = window.event, obj = e.target || e.srcElement) => {
e.stopPropagation();
alert(obj.id);
};
document
.getElementById("inSide")
.addEventListener("click", eventHandle, false);
document
.getElementById("outSide")
.addEventListener("click", eventHandle, false);
</script>
上面例子中,如果加上 e.stopPropagation()
,点击 inSide 执行完 click 事件就会阻止事件继续冒泡,否则从 inSide 到 outSide 的 click 事件都执行一次。
集中处理事件体现在:如果不监听 inSide,只监听 outSide,点击 inSide 时,e.target 还是指 inSide,不会因为没监听它就不指向它,这就是事件冒泡决定的(由具体到不具体)。
参考:
文中图片可能来自网络,侵删
Leave a comment