事件冒泡效果演示:
事件冒泡起因:
元素本身与父元素绑定了同一事件(演示为单击事件)后,在自身的事件被触发后,父元素的事件也会默认被触发。到window或document层时,事件才会终止。
由于代码较少,故全部都存放在index.html中,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件冒泡</title>
</head>
<body>
<style>
* {
padding: 0;
margin: 0;
}
#box {
width: 800px;
height: 600px;
margin: 20px auto;
border: 1px solid #ededed;
background: #ededed;
}
#box > p {
font-size: 24px;
margin: 5px auto;
text-align: center;
}
#box1 {
margin: auto;
width: 500px;
height: 500px;
background: #8a6de9;
border: 1px solid #8a6de9;
}
#box2 {
margin: 100px auto;
width: 300px;
height: 300px;
background: #f46e00;
}
</style>
<div id="box">
<p>事件冒泡演示效果</p>
<span>  效果说明:<br>    给两个div都绑定单击事件,在点击内层的div后,会自动触发外层的单击事件。</span>
<div id="box1">
<p>box1</p>
<div id="box2">
<p>box2</p>
</div>
</div>
</div>
<script type="text/javascript">
let box1 = document.getElementById('box1');
let box2 = document.getElementById('box2');
// box1单击事件
box1.onclick = function (even) {
alert('点击了box1');
};
// box2单击事件
box2.onclick = function (even) {
alert('点击了box2');
}
</script>
</body>
</html>
事件冒泡效果直接复制代码执行即可看到。
阻止事件冒泡后的效果:
阻止事件冒泡:在元素本身的事件被执行后,阻止其父元素的事件被触发,具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件冒泡</title>
</head>
<body>
<style>
* {
padding: 0;
margin: 0;
}
#box {
width: 800px;
height: 600px;
margin: 20px auto;
border: 1px solid #ededed;
background: #ededed;
}
#box > p {
font-size: 24px;
margin: 5px auto;
text-align: center;
}
#box1 {
margin: auto;
width: 500px;
height: 500px;
background: #8a6de9;
border: 1px solid #8a6de9;
}
#box2 {
margin: 100px auto;
width: 300px;
height: 300px;
background: #f46e00;
}
</style>
<div id="box">
<p>事件冒泡演示效果</p>
<span>  效果说明:<br>    给两个div都绑定单击事件,在点击内层的div后,会自动触发外层的单击事件。</span>
<div id="box1">
<p>box1</p>
<div id="box2">
<p>box2</p>
</div>
</div>
</div>
<script type="text/javascript">
let box1 = document.getElementById('box1');
let box2 = document.getElementById('box2');
// box1单击事件
box1.onclick = function (even) {
alert('点击了box1');
};
// box2单击事件
box2.onclick = function (even) {
alert('点击了box2');
even.stopPropagation(); // 区别点,阻止事件冒泡的代码
}
</script>
</body>
</html>