本文主要介绍在获取页面元素并绑定事件之后,事件是按照什么样的顺序执行的。包括两种方式:冒泡和捕获。
冒泡为默认顺序,由内而外,从子到父,执行时从内到外获取设置了冒泡的元素,设置了冒泡或直接点击的元素会被执行。
捕获可通过以下方法设置:将addEventListener()的第三个参数设置为true,冒泡对应的是false.从外到内,由父到子,执行时从外到内捕获设置了true的元素,设置为true或者直接点击的元素会被执行。示例代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 500px;
height: 500px;
background-color: skyblue;
}
ul {
width: 400px;
height: 100px;
background-color: #2ba549;
}
li {
width: 200px;
height: 50px;
background-color: #cf4c18;
}
</style>
</head>
<body>
<div>
<ul>
<li></li>
</ul>
</div>
<div>
<ul>
<li></li>
</ul>
</div>
<script>
var divs = document.querySelectorAll('div');
var uls = document.querySelectorAll('ul');
var lis = document.querySelectorAll('li');
// 1.冒泡:从内到外获取设置了冒泡的元素,设置了冒泡或直接点击的元素会被执行
divs[0].addEventListener('click', function() {
alert(1);
});
uls[0].addEventListener('click', function() {
alert(2);
});
lis[0].addEventListener('click', function() {
alert(3);
});
// 2.捕获:从外到内捕获设置了true的元素,设置为true或者直接点击的元素会被执行
divs[1].addEventListener('click', function() {
alert(1);
}, true);
uls[1].addEventListener('click', function() {
alert(2);
}, true);
lis[1].addEventListener('click', function() {
alert(3);
}, true);
</script>
</body>
</html>