DOM事件阶段以及事件捕获与事件冒泡先后执行顺序
2017-04-28 10:23
671 查看
DOM事件三个阶段
当一个DOM事件被触发时,它不仅仅只是单纯地在本身对象上触发一次,而是会经历三个不同的阶段:
捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象;
目标阶段:到达目标事件位置(事发地),触发事件;
冒泡阶段:再从目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象。
引用来源:http://www.w3.org/TR/DOM-Level-3-Events/#event-flow
事件捕获与事件冒泡先后执行顺序就显而易见了。
实验部分
打开在线编辑器:http://JSbin.com/goqede/edit?html,CSS,js,output
代码如下:
当我们点击inner的时候结果是:
outer_捕获
middle_捕获
inner_捕获
inner_冒泡
middle_冒泡
outer_冒泡
由此可见:确实是先由外向内事件捕获,一直到事发元素,在由内向外冒泡到根节点上
tips:
当事件触发在目标阶段时,会根据事件注册的先后顺序执行,在其他两个阶段注册顺序不影响事件执行顺序。也就是说如果该处既注册了冒泡事件,也注册了捕获事件,则按照注册顺序执行。
例如当我点击inner的时候,按照以上顺序,答案确实是我们想要的答案:
、
当我的事件注册顺序改变成如下代码时:
当我们点击outer时:
当我们点击middle时:
当我们点击inner时:
可以看出在目标阶段的事发元素上的事件执行顺序是有事件注册顺序决定的
本文地址:http://www.cnblogs.com/alvinwei1024/p/4739344.html
当一个DOM事件被触发时,它不仅仅只是单纯地在本身对象上触发一次,而是会经历三个不同的阶段:
捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象;
目标阶段:到达目标事件位置(事发地),触发事件;
冒泡阶段:再从目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象。
引用来源:http://www.w3.org/TR/DOM-Level-3-Events/#event-flow
事件捕获与事件冒泡先后执行顺序就显而易见了。
实验部分
打开在线编辑器:http://JSbin.com/goqede/edit?html,CSS,js,output
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> #outer{ text-align: center; width: 400px; height: 400px; background-color: #ccc; margin: 0 auto; } #middle{ width: 250px; height: 250px; background-color: #f00; margin: 0 auto; } #inner{ width: 100px; height: 100px; background-color: #0f0; margin: 0 auto; border-rad } </style> </head> <body> <div id='outer'> <span>outer</span> <div id='middle'> <span>middle</span> <div id='inner'> <span>inner</span> </div> </div> </div> <script> function $(element){ return document.getElementById(element); } function on(element,event_name,handler,use_capture){ if(addEventListener){ $(element).addEventListener(event_name,handler,use_capture); } else{ $(element).attachEvent('on'+event_name,handler); } } on("outer","click",o_click_c,true); on("middle","click",m_click_c,true); on("inner","click",i_click_c,true); on("outer","click",o_click_b,false); on("middle","click",m_click_b,false); on("inner","click",i_click_b,false); function o_click_c(){ console.log("outer_捕获"); alert("outer_捕获"); } function m_click_c(){ console.log("middle_捕获") alert("middle_捕获"); } function i_click_c(){ console.log("inner_捕获") alert("inner_捕获"); } function o_click_b(){ console.log("outer_冒泡") alert("outer_冒泡"); } function m_click_b(){ console.log("middle_冒泡") alert("middle_冒泡"); } function i_click_b(){ console.log("inner_冒泡") alert("inner_冒泡"); } </script> </body> </html>
当我们点击inner的时候结果是:
outer_捕获
middle_捕获
inner_捕获
inner_冒泡
middle_冒泡
outer_冒泡
由此可见:确实是先由外向内事件捕获,一直到事发元素,在由内向外冒泡到根节点上
tips:
当事件触发在目标阶段时,会根据事件注册的先后顺序执行,在其他两个阶段注册顺序不影响事件执行顺序。也就是说如果该处既注册了冒泡事件,也注册了捕获事件,则按照注册顺序执行。
例如当我点击inner的时候,按照以上顺序,答案确实是我们想要的答案:
、
当我的事件注册顺序改变成如下代码时:
当我们点击outer时:
当我们点击middle时:
当我们点击inner时:
可以看出在目标阶段的事发元素上的事件执行顺序是有事件注册顺序决定的
本文地址:http://www.cnblogs.com/alvinwei1024/p/4739344.html
相关文章推荐
- DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
- DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
- DOM事件阶段以及事件捕获与事件冒泡先后执行顺序
- DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
- JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
- JavaScript-父子dom同时绑定捕获冒泡点击事件时执行顺序
- Javascript 事件的捕获,冒泡和目标阶段的回调函数执行顺序
- JavaScript-父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序
- 看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序
- W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。
- javascript dom 事件的冒泡和捕获顺序
- 看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序
- 一个DOM元素绑定多个事件时,先执行冒泡还是捕获
- 关于dom 事件冒泡、捕获 dom事件三个阶段
- JavaScript中关于事件绑定、冒泡、捕获和执行顺序
- 事件冒泡和捕获的执行顺序
- W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。
- 看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序
- 看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序
- javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结