`
hyj1254
  • 浏览: 336946 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DOM事件传播模型

 
阅读更多
参考了如下链接,备忘一下:
DOM事件模型
见下图:

标准DOM2的事件传播模型分2个阶段:
首先是捕获阶段(capture prase):从document对象起向下传播,直至到达目标对象(此过程IE不支持)。若目标对象的父节点注册了捕捉型的事件处理函数(见例1),则该函数会在事件到达目标对象前调用一次。
然后是起泡阶段:从目标对象起向document对象传播,即起泡(bulling)。若父节点注册了同类的事件处理函数,则也会调用。
<!docType html>
<html>
<head>
<style>
#outer ,#inner {border:1px solid blue;}
#outer {width:100px;height:100px;}
#inner {width:80px;height:80px;}
</style>
</head>
<body>
<div id="outer">
<div id="inner"></div>
</div>
<script><!--
var outer=document.getElementById('outer');
var inner = document.getElementById('inner');
outer.addEventListener('click',function(event){alert('out捕捉型事件');},true);
outer.addEventListener('click',function(event){alert('out非捕捉型事件');},false);
outer.addEventListener('dblclick',function(event){alert('out dbclick');},true);
inner.addEventListener('click',function(event){alert('in,捕获型事件');},true);
//--</script>
</body>
</html>

单击#out,则执行顺序:
out捕捉型事件==>in,捕获型事件==>out非捕捉型事件。
由于是单击,所以无论是向下还是向上传播都只会执行click事件,dbclick因此不执行。首先向下传播,在目标对象的父节点中只遇到了一个捕捉型事件;然后执行目标对象上的单击事件;再起泡(bulling),执行父节点上对应的非捕获型单击事件,这也说明捕获型事件只在捕获阶段执行。
重要:chrome,ff没有完全遵循dom2标准,注意这一行:
inner.addEventListener('click',function(event){alert('in');},true);

它是目标对象,且注册了捕获型事件,dom2标准规定捕获型事件的设计初衷是让事件在传播到目标对象之前执行,因此其必须只能在目标对象的父节点上执行,而这里明显违背。

另外:不要将这里的capture阶段和IE事件模型中的setCapture混为一谈。后者用来捕获所有的鼠标事件(MouseEvent),使得无论鼠标在哪里,即使移出了窗口也能触发鼠标事件。
分享到:
评论

相关推荐

    JavaScript 动态网页实例 - DOM 中的事件处理.rar

    DOM2事件模型规则描述了创建、捕获、控制与取消事件的标准方法,还描述了事件传播行为,也就是说,一个事件如何到达其目标,以及达到后将要发生的动作。在6中,由于没有提供对 DOM2事件模型的支持,因此,本章中涉及...

    论文研究-基于动态污点传播模型的DOMXSS漏洞检测.pdf

    分析DOM XSS漏洞的形成原理,提出一种基于动态污点传播模型的DOM XSS漏洞检测算法,重点研究污点引入和污点检查,利用混合驱动爬虫实现自动化检测,采用函数劫持等方法检测污点数据的执行,并设计实现了原型系统DOM-...

    关于javascript DOM事件模型的两件事

    事件捕捉(Event Capture)的实现问题 W3C DOM Level2的事件模型规范中,事件在DOM树中的传播过程(从根节点到目标节点)被分为了两个阶段:捕捉(Capture)和冒泡(Bubbling)。下面这个图能大概的说明整个过程: ...

    【JavaScript源代码】javascript事件冒泡,事件捕获和事件委托详解.docx

    javascript事件冒泡,事件捕获和事件委托详解  1、事件冒泡:在javascript事件传播... js事件捕获一般通过DOM2事件模型addEventListener来实现的: target.addEventListener(type, listener, useCapture) 第三个参

    基于组件的框架Flight.zip

    Twitter称,该框架致力于构建基于现有DOM模型的应用程序,并可以将功能映射到DOM节点,且支持DOM的事件传播机制。 无论应用程序是否使用模板或生成HTML,Flight都不依赖于任何Web渲染技术,并且不关心请求如何被...

    详解javascript事件冒泡

    如果一个html元素触发事件,那么这个事件就会在DOM树中的触发节点和根节点之间按照一定的顺序传播,所有经过的节点都会接收到被触发的事件,这个传播过程被称之为事件流。按照事件的传播顺序,可以将其分为两类,一...

    javascript完全学习手册2 源码

    10.4.2 IE的事件传播 10.5 常用事件 10.5.1 鼠标事件 10.5.2 键盘事件 10.5.3 表单事件 10.5.4 编辑事件 10.5.5 页面事件 第11章 使用Cookie和文件 11.1 Cookie 11.1.1 Cookie概述 11.1.2 Cookie...

    javascript完全学习手册1 源码

    10.4.2 IE的事件传播 281 10.5 常用事件 282 10.5.1 鼠标事件 282 10.5.2 键盘事件 286 10.5.3 表单事件 291 10.5.4 编辑事件 295 10.5.5 页面事件 297 第11章 使用Cookie和文件 303 11.1 Cookie 303 11.1.1 Cookie...

    Abstract.js:Abstract.js是一个用于快速开发的Web框架

    Abstract.js Abstract.js是用于快速Web开发的新奇框架。 这是世界上第一个面向逻辑的程序框架(据我所... **虚拟DOM和事件传播:**模型是指真实Dom。 模型利用父子关系和事件传播构造虚拟DOM树。 **逻辑抽象:**抽象

    JavaScript王者归来part.1 总数2

     13.3.1 起泡和捕捉--浏览器的事件传播   13.3.2 事件处理函数的注册   13.3.3 把对象注册为事件处理程序   13.3.4 事件模块和事件类型   13.3.5 关于Event接口   13.3.5.1 Event接口的属性和方法   ...

    android学习文档

    7、基于回调的事件传播 32 五、 Android数据存储 32 1、android的数据存储 32 2、如何在android中使用SQlite数据库? 33 2.1 使用SharedPreferences 33 2.2 练习使用SharedPreferences 33 3、要读写其他应用的...

    js实现的点击div区域外隐藏div区域

    首先看下JS的事件模型,JS事件模型为向上冒泡,如onclick事件在某一DOM元素被触发后,事件将跟随节点向上传播,直到有click事件绑定在某一父节点上,如果没有将直至文档的根。 阻止冒泡:1、stopPropagation()对于非...

    精通JS脚本之ExtJS框架.part2.rar

    2.3 2级DOM事件模型 2.3.1 事件传播 2.3.2 注册事件处理程序 2.3.3 event对象 2.4 常用事件 2.4.1 键盘事件 2.4.2 鼠标事件 2.4.3 页面事件 第3章 开始使用ExtJS 3.1 ExtJS概述 3.1.1 ExtJS简介 3.1.2 ...

    精通JS脚本之ExtJS框架.part1.rar

    2.3 2级DOM事件模型 2.3.1 事件传播 2.3.2 注册事件处理程序 2.3.3 event对象 2.4 常用事件 2.4.1 键盘事件 2.4.2 鼠标事件 2.4.3 页面事件 第3章 开始使用ExtJS 3.1 ExtJS概述 3.1.1 ExtJS简介 3.1.2 ...

    精通AngularJS part1

    将模型变化传播给DOM291 同步DOM和模型变化292 Scope$apply——打开AngularJS世界的钥匙293 深入$digest循环295 整合300 112性能优化——设置期望值、测量、调节、并重复301 113AngularJS应用的性能优化303 ...

    阿赖树型控件javaScipt

    javascript函数,与一般的javascript程序不同的是它是基于DOM(文档对象模型)和面向对象的方法设计,拥有属性、 方法和事件以及特定的界面元素。 写这些程序的目的是为了给大家提供更简单高效的WEB设计方法,提供...

    DIV外区域Click后关闭DIV的实现代码

    首先看下JS的事件模型,JS事件模型为向上冒泡,如onclick事件在某一DOM元素被触发后,事件将跟随节点向上传播,直到有click事件绑定在某一父节点上,如果没有将直至文档的根

    purescript-purview:基于增量Lambda演算的UI库

    这样,我们可以避免使用diff算法,而使用增量lambda演算(由)来将模型更改传播到DOM。 这里的方法是提供一个可以用来定义各种API的非标准工具箱。 提供了示例API供参考。 有关API的概述,请参见。

    基于XML的Web数据资源共享

    首先分析研究了XML相关技术,解决了共享资源信息的生成、处理、利用问题,采用Dom4j对提出的方案进行了实现,有效增强了异构系统的数据互通性.由于所提出的共享链和共享网使得网络共享具有了传播特性,解决了更大范围内...

Global site tag (gtag.js) - Google Analytics