一、事件冒泡
说明:
事件冒泡就是指事件向上传导,当后代元素的事件被触发时,其祖先元素的相同事件也会被触发
下面以简单例子说明:
<style>
#box1 {
background-color: pink;
width: 300px;
height: 300px;
}
span {
background-color: blue;
}
</style>
</head>
<body>
<div id="box1">
box1
<span id="span1">我是span</span>
</div>
<script>
window.onload = function () {
var span1 = document.getElementById("span1")
// var span1 = document.getElementByTagName("span");
span1.onclick = function () {
alert("我是span");
};
var box1 = document.getElementById("box1")
// var span1 = document.getElementByTagName("span");
box1.onclick = function () {
alert("我是box1");
};
var body1 = document.body
// var span1 = document.getElementByTagName("span");
body1.onclick = function () {
alert("我是body");
};
}
</script>
分析:
1.其中我分别为span1、box1、body均设置了点击事件,当带点击相应的元素时,弹出相应的对话框
2.由于冒泡事件的作用机制,当我点击span1时,弹出alert(“我是span”)之后,相续弹出alert(“我是box1”);、alert(“我是body”);
3.若想取消冒泡事件,可以使用如下方法:
var span1 = document.getElementById("span1")
// var span1 = document.getElementByTagName("span");
span1.onclick = function (event) {
event = event || window.event;
alert("我是span");
event.cancelBubble = true;
};
此时点击span时,不会再向其祖先元素冒泡相同的事件,若想使得box1也取消冒泡,同理设置即可;
二、事件委派
说明:
事件委派是指将事件统一绑定给元素的工通祖先元素,这样后代元素上的事件触发时,会一直冒泡到祖先元素上(即通过祖先元素相应来处理)