`
hyj1254
  • 浏览: 340087 次
  • 性别: 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),使得无论鼠标在哪里,即使移出了窗口也能触发鼠标事件。
分享到:
评论

相关推荐

    手写DOM事件模型

    **手写DOM事件模型** 在Web开发中,DOM(Document Object Model)事件模型是JavaScript与网页交互的关键。它允许我们监听、处理和触发各种用户或浏览器产生的事件,如点击、鼠标移动、键盘输入等。本篇文章将深入...

    javascript防止事件传播

    JavaScript防止事件传播是一种常见的前端开发技术,用于控制事件在DOM(文档对象模型)层次中的传播方式。事件传播包括三个阶段:捕获阶段、目标阶段和冒泡阶段。了解这三个阶段对于掌握如何阻止事件传播至关重要。 ...

    DOM事件的区别

    事件流是指事件如何在DOM树中的元素间传播。主要分为三个阶段:捕获阶段、目标阶段和冒泡阶段。 1. **捕获阶段**:事件从根节点开始向下传递,直到到达目标节点。 2. **目标阶段**:事件到达目标节点,并在这里触发...

    Html dom _BOM 模型 _事件处理机制 _面向对象基础

    以上内容中包含了对DOM中各种对象的属性和方法的使用,BOM模型的核心对象window及其常用方法,JavaScript中的事件处理机制,包括事件是如何产生的、事件对象的特性以及事件冒泡现象,以及面向对象编程的基础知识,...

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

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

    深入理解JS DOM事件机制

    - 事件流描述了事件在DOM(文档对象模型)中的传播路径。主要有两种模型:事件冒泡和事件捕获。 - **事件冒泡**:事件开始时由最内层元素接收,然后逐级向上层元素传递,直到文档的根节点。这是大多数浏览器的默认...

    传播智客扬中科老师讲的DOM 学习笔记

    根据给定的文件信息,我们可以总结出以下关于DOM(Document Object Model)操作的关键知识点...同时,对`this`关键字和事件模型的理解,是构建复杂用户界面的基础,有助于开发者设计出既美观又功能强大的Web应用程序。

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

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

    js中DOM事件绑定分析

    本文主要分析JavaScript中的三种事件模型:内联模型、脚本模型以及DOM2级事件模型。 1. **内联模型**: 这种模型是在HTML元素内部直接设置`onclick`等事件属性来绑定事件处理函数。例如: ```html 按钮" onclick...

    Gecko DOM Reference(Firefox DOM参考手册)

    2. **事件处理**:详述DOM事件模型,包括事件类型、事件目标、事件传播和事件处理函数。 3. **CSS和样式**:解释如何通过DOM访问和修改元素的CSS样式。 4. **遍历和操作**:指导如何遍历DOM树,添加、删除或修改节点...

    html dom 底层 javascript

    DOMEvent接口定义了事件处理机制,包括事件类型、事件属性和事件传播模型。这使得开发者可以创建事件监听器,响应用户的输入和页面的状态变化。 #### DOM 样式引用 DOMStyle接口和相关的对象如`...

    JavaScript dom0级事件.pdf

    在JavaScript中,DOM0级事件处理程序是一种早期的事件处理方式,它是在DOM(文档对象模型)规范尚未完全定义事件处理机制时广泛使用的。在DOM0级事件中,事件处理程序的绑定和解绑是通过直接将函数赋值给元素的特定...

    javaScriptDom编程艺术中文版随书源码

    6. **DOM事件冒泡和捕获**:理解事件传播机制,掌握如何阻止默认行为(`event.preventDefault()`)和停止事件传播(`event.stopPropagation()`)。 7. **DOM的XMLHttpRequest(XHR)与 Fetch API**:用于异步加载...

    javascript事件模型

    事件流是JavaScript事件模型的核心部分,描述了事件如何在DOM(Document Object Model)层次结构中传递。主要有两种事件流模型:冒泡型和捕获型。冒泡型事件从最具体的节点(例如,文档中的一个元素)开始,然后逐级...

    非常实用的DOM文档对象中文手册

    10. **DOM事件和事件流**:DOM事件模型包括冒泡、捕获和目标三个阶段,手册会解释这些概念以及如何控制事件传播。 这个中文手册深入浅出地阐述了DOM的核心原理和实践技巧,对初学者和经验丰富的开发者都是宝贵的...

    JavaScrpt DOMscripting编程艺术

    JavaScript DOM脚本编程艺术主要涉及的是使用JavaScript与文档对象模型(DOM)进行交互的技术,它在Web开发中占据着核心地位。DOM是HTML和XML文档的结构化表示,允许我们通过编程方式访问和修改页面元素。以下是这个...

    DOM.zip_JavaScript dom_it

    8. **DOM事件流**:DOM事件流描述了事件如何在元素层级上传播,分为捕获阶段、目标阶段和冒泡阶段,开发者可以据此控制事件处理顺序。 9. **DOM性能优化**:尽管DOM操作强大,但频繁的操作可能导致性能下降。因此,...

Global site tag (gtag.js) - Google Analytics