事件冒泡
结构上(非视觉上)嵌套关系的元素 会存在事件冒泡的功能
即同一事件 自子元素冒泡向父元素(自底向上)
<style>
.wapper{
width: 300px;
height: 300px;
background-color: red;
}
.content{
margin-left: 300px;
width: 200px;
height: 200px;
background-color: yellow;
}
.box{
margin-left: 200px;
width: 100px;
height: 100px;
background-color: green;
}
</style>
<body>
<div class="wapper">
<div class="content">
<div class="box"></div>
</div>
</div>
<script>
var wapper = document.getElementsByClassName('wapper')[0];
var content = document.getElementsByClassName('content')[0];
var box = document.getElementsByClassName('box')[0];
wapper.addEventListener('click',function(){
console.log('wapper');
},false)
content.addEventListener('click',function(){
console.log('content');
},false)
box.addEventListener('click',function(){
console.log('box');
},false)
</script>
</body>
由上图可知 在视觉上 这三个元素没有嵌套关系 但是结构上是存在嵌套关系的
即只有结构上存在嵌套关系的元素 会存在事件冒泡的功能
上图结构上绿色是最里层的元素 红色是最外层的元素
点击红色的区域 会返回 wapper
点击黄色的区域 会返回 content wapper
点击绿色的区域 会返回 box content wapper
即自子元素冒泡向父元素
事件捕获
结构上(非视觉上)嵌套关系的元素 会存在事件捕获的功能
即同一事件 自父元素捕获至子元素(事件源元素)(自底向上)
由上例 只需要将 addEventListener中的flase改为true 其事件处理模型就变为事件捕获了
点击红色的区域 会返回 wapper
点击黄色的区域 会返回 wapper content
点击绿色的区域 会返回 wapper content box
输出的顺序是由外向里的
触发顺序
先捕获 后冒泡
//若同一个事件类型同时绑定两个事件处理模型 一个是事件冒泡 一个是事件捕获 那么先绑定的先执行(可能过时了)
<style>
.wapper{
width: 300px;
height: 300px;
background-color: red;
}
.content{
margin-left: 300px;
width: 200px;
height: 200px;
background-color: yellow;
}
.box{
margin-left: 200px;
width: 100px;
height: 100px;
background-color: green;
}
</style>
<body>
<div class="wapper">
<div class="content">
<div class="box"></div>
</div>
</div>
<script>
var wapper = document.getElementsByClassName('wapper')[0];
var content = document.getElementsByClassName('content')[0];
var box = document.getElementsByClassName('box')[0];
wapper.addEventListener('click',function(){
console.log('wapper-Bub');
},false)
content.addEventListener('click',function(){
console.log('content-Bub');
},false)
box.addEventListener('click',function(){
console.log('box-Bub');
},false)
wapper.addEventListener('click',function(){
console.log('wapper');
},true)
content.addEventListener('click',function(){
console.log('content');
},true)
box.addEventListener('click',function(){
console.log('box');
},true)
</script>
</body>
点击绿色的区域 会返回 wapper content box box-Bub content-Bub wapper-Bub
注 IE没有捕获事件 focus,blur,change,submit,reset,select 等事件不冒泡