DOM事件流

“DOM2级事件”规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段

事件捕获:不太具体的节点应该更早的接收到事件,而最具体的节点应该最后接收到事件;(DOM2规范要求从document开始传播,但是浏览器从window对象开始传播)

事件冒泡:最具体的节点先接收到事件,然后逐级向上传播到较为不具体的节点

 

接下来我用一个代码给大家演示一下DOM流的事件传递流程:

 1 <body>
 2 <div id="test1">
 3     1
 4     <div id="test2">
 5         2
 6         <div id="test3">
 7             3
 8         </div>
 9     </div>
10 </div>
11 <script type="text/javascript">
12     document.getElementById("test2").addEventListener('click',function(){alert("冒泡p2");},false);
13     document.getElementById("test3").addEventListener('click',function(){alert("冒泡p3");},false);
14     document.getElementById("test1").addEventListener('click',function(){alert("冒泡p1");},false);
15     document.getElementById("test1").addEventListener('click',function(){alert("捕获p1");},true);
16     document.getElementById("test2").addEventListener('click',function(){alert("捕获p2");},true);
17     document.getElementById("test3").addEventListener('click',function(){alert("捕获p3");},true);
18 
19 </script>
20 </body>

设置的监听器中同时包含了事件捕获监听器和冒泡监听器,点击div id=“test3”后依次显示:

捕获p1->捕获p2->冒泡p3->捕获p3->冒泡p2->冒泡p1

我查阅了《javascript高级程序设计》书中写的执行顺序如下:

点击test3后:

1、“事件捕获”阶段,事件捕获阶段中实际的目标不会接收到事件;

2、“实际目标”阶段,事件在<div id="test3"></div>上发生,并在事件处理中,看做冒泡阶段的一部分;

3、“冒泡阶段”,事件又传播回文档

 

ps:特别注意,即使“DOM2级事件”规范明确要求捕获阶段不会涉及事件目标,但是现在大多浏览器都会在捕获阶段触发事件对象上的事件;

power by 西南科技大学---wutian

posted on 2015-07-05 21:36  句号小弟wutian  阅读(191)  评论(0编辑  收藏  举报