什么是事件冒泡?html
如图:在一个对象上触发某类事件(好比单击onclick事件),这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象全部同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。自下而上的去触发事件。 jquery
事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。浏览器
html结构函数
<div class="screen" id="parent">测试 <div class="layer-screen">spa <div class="screen-content">htm <a class="filter-tag" href="void(0);">点击a标签 a>对象 div>blog div>事件 div> |
4.Script
<script> $(function(){ document.getElementById("parent").addEventListener("click",function(e){ alert("我是最外层"); }); $(".layer-screen").click(function(e){ alert("我是中间层"); }); $("a").click(function(e){ alert("我是a标签"); }); }); script> |
5.执行结果
a) 点击a标签,弹出:我是a标签 → 我是中间层 → 我是最外层 b) 点击中间层,弹出:我是中间层 → 我是最外层 c) 点击最外层,弹出:我是最外层 |
6.经过阻止事件冒泡实现点击空白处关闭弹窗
id=”parent”层做为屏蔽层,class="layer-screen"做为弹出层,给id=”parent”即最外层添加关闭弹窗的方法,给中间层和a标签绑定click事件,经过event.stopPropagation()中止事件的冒泡传递。 能够本身选择绑定事件时采用事件捕获仍是事件冒泡,方法就是绑定事件时经过addEventListener函数,它有三个参数,第三个参数如果true,则表示采用事件捕获,如果false,则表示采用事件冒泡。默认为冒泡。 ele.addEventListener('click',doSomething2,true) |
7.阻止事件冒泡后的function
示例: //阻止事件冒泡 $("a").click(function(e){ alert("我是a标签"); e.stopPropagation(); }); |
8.执行结果
a) 点击a标签,弹出:我是a标签 b) 点击中间层,弹出:我是中间层 c) 点击最外层,弹出:我是最外层 |
9.在id=”parent”层的绑定事件中添加关闭弹窗的方法便可。
10.事件捕获的测试
给a标签设置id=”a”,给中间层设置id=“center”,修改参数为true document.getElementById("parent").addEventListener("click",function(){ alert("我是最外层"); },true) document.getElementById("center").addEventListener("click",function(){ alert("我是中间层"); },true) document.getElementById("a").addEventListener("click",function(){ alert("我是a标签"); },true) |
执行结果:
点击a标签,弹出: 我是最外层 → 我是中间层 → 我是a标签 即与事件捕获的执行顺序相反。 |
(将全部的点击事件参数都改成true才会出现该效果)