`

事件捕获和事件冒泡(二)

阅读更多

源文链接:http://www.liloy.info/archives/103.html

javascript的核心就在于事件处理。我们经常会对一个对象进行事件绑定,加上事件处理函数。如果一个元素和它的一个上级节点对于同一个事件都有进行事件处理,哪一个先触发呢?毫无疑问,这决定于浏览器。

假设一个元素element1,它有一个下级元素element2。

如图:

-----------------------------------
| element1                        |
|   -------------------------     |
|   |element2               |     |
|   -------------------------     |
|                                 |
-----------------------------------

这两个元素都绑定了click事件,如果用户点击了element2,它在element1和element2上都触发了click事件,那这两个事件处理程序哪个先执行呢?事件顺序是什么?

 

两种模型


以前,Netscape和Microsoft是不同的实现方式。

Netscape中,element1先触发,这就叫做事件捕获。

Microsoft中,element2先触发,这就叫做事件冒泡。

两种事件处理顺序刚好相反。Explorer只支持事件冒泡,Mozilla, Opera 7 和 Konqueror两种都支持,旧版本的Opera’s 和 iCab两种都不支持 。

事件捕获


当你使用事件捕获时,父级元素先触发,子级元素后触发,即element1先触发,element2后触发。如图:

               | |
---------------| |-----------------
| element1     | |                |
|   -----------| |-----------     |
|   |element2   /          |     |
|   -------------------------     |
|        事件捕获                 |
-----------------------------------

事件冒泡


当你使用事件冒泡时,子级元素先触发,父级元素后触发,即element2先触发,element1后触发。如图:

               /
---------------| |-----------------
| element1     | |                |
|   -----------| |-----------     |
|   |element2  | |          |     |
|   -------------------------     |
|        事件冒泡                 |
-----------------------------------

W3C模型


W3C模型是将两者进行中和,在W3C模型中,任何事件发生时,先从顶层开始进行事件捕获,直到事件触发到达了事件源元素。然后,再从事件源往上进行事件冒泡,直到到达document。

                 | |  /
-----------------| |--| |-----------------
| element1       | |  | |                |
|   -------------| |--| |-----------     |
|   |element2     /  | |          |     |
|   --------------------------------     |
|        W3C 模型                        |
------------------------------------------

程序员可以自己选择绑定事件时采用事件捕获还是事件冒泡,方法就是绑定事件时通过addEventListener函数,它有三个参数,第三个参数若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。

比如:

 element1.addEventListener('click',doSomething2,true)

element2.addEventListener('click',doSomething,false)

这样绑定,点击element2后

  1. 从顶到底进行事件捕获,碰到了element1这个采用了事件捕获的元素,则doSomething2函数执行。
  2. 到达事件源元素element2后,从底到顶进行事件冒泡,碰到了element2这个采用了事件冒泡的元素,则doSomething函数执行。

比如:

 element1.addEventListener('click',doSomething2,false)

element2.addEventListener('click',doSomething,false)

这样绑定,点击element2后

  1. 从顶到底进行事件捕获,没有碰到任何采用事件捕获的元素。
  2. 到达事件源元素element2后,从底到顶进行事件冒泡,先碰到了element2这个采用了事件冒泡的元素,则doSomething函数执行,再碰到了element1这个采用了事件冒泡的元素,则doSomething2函数执行

与传统绑定事件方式的兼容


在一个支持W3C DOM的浏览器中,像这样一般的绑定事件方式,是采用的事件冒泡方式。

 element1.onclick  = doSomething2

IE浏览器


如上面所说,IE只支持事件冒泡,不支持事件捕获,它也不支持addEventListener函数,不会用第三个参数来表示是冒泡还是捕获,它提供了另一个函数attachEvent。

element1.attachEvent("onclick", doSomething2);
element2.attachEvent("onclick", doSomething);

都是事件冒泡,因此,这样绑定后,点击element2后,没有事件捕获,从底到顶进行事件冒泡,先执行doSomething,再执行doSomething2

分享到:
评论

相关推荐

    Android-传统事件捕获和冒泡的流程解析

    本文将深入解析Android中事件捕获和冒泡的流程,帮助开发者更好地理解和运用这一机制。 事件在Android中主要通过View和 ViewGroup对象进行传递。当用户在屏幕上触摸或点击时,系统会生成一个事件对象,如...

    JS冒泡事件与事件捕获实例详解

    冒泡事件和事件捕获是JavaScript中处理事件传播的两种主要模型,它们定义了事件在DOM树中传播的顺序。在实际的Web开发中,深入理解这两种模型对于正确处理事件,避免潜在的问题至关重要。 冒泡事件是指当一个事件在...

    简析JavaScript事件、以及捕获和冒泡

    本文将深入探讨JavaScript事件机制,特别是事件的捕获和冒泡阶段。 首先,理解JavaScript事件的基础概念至关重要。事件是用户或浏览器在与网页交互时发生的动作,比如点击按钮、页面加载或滚动等。当这些事件发生时...

    javascript 中事件冒泡和事件捕获机制的详解

    javascript 中事件冒泡和事件捕获机制的详解 二者作用:描述事件触发时序问题 事件捕获:从document到触发事件的那个节点,即自上而下的去触发事件—由外到内 事件冒泡:自下而上的去触发事件—由内到外 绑定事件...

    事件冒泡及捕获

    事件冒泡和事件捕获是两种不同的事件处理机制,它们决定了事件如何在DOM(Document Object Model)层次结构中传播。了解这两者对于优化事件处理性能和编写高效代码至关重要。 事件冒泡是从最具体的节点(通常是DOM...

    JS中绑定事件顺序(事件冒泡与事件捕获区别)

    JavaScript中的事件处理机制是网页交互的核心,其中包括了两种主要的事件传播模式:事件冒泡(Bubbling)和事件捕获(Cropping)。事件冒泡是指事件从最深的节点开始,然后逐级向上传播到最外层的节点。而事件捕获则...

    javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结

    总之,JavaScript的事件处理是构建动态网页的重要手段,熟练掌握事件绑定、事件冒泡、事件捕获和事件执行顺序能帮助开发者编写更高效、更易于维护的代码。通过实践和不断学习,可以更深入地理解和运用这些概念。

    一篇文章让你彻底弄懂JS的事件冒泡和事件捕获

    事件触发时序问题中的两个重要概念是事件冒泡(event bubbling)和事件捕获(event capturing)。这两个术语描述了事件流(event flow)在DOM树中的传播顺序。 事件冒泡是指当一个元素上的事件被触发后,该事件会...

    事件冒泡与事件捕获

    在JavaScript的事件处理中,事件冒泡和事件捕获是两个关键的概念,它们定义了事件在DOM(文档对象模型)中的传播方式。事件通常由用户交互触发,如点击按钮、鼠标移动等,当这些事件发生时,它们会在元素及其祖先...

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

    5. **总结**:事件冒泡和事件捕获是JavaScript事件模型的两个阶段,它们定义了事件如何在DOM树中传播。事件委托则是一种高效利用事件处理的策略,可以降低内存消耗,提高性能,尤其适用于动态添加或删除DOM元素的...

    ie事件捕获控件 捕获ie浏览器到打开链接等等的事件

    事件模型分为三个阶段:冒泡、目标和捕获。在IE浏览器中,事件通常从最具体的元素(如一个按钮)开始,然后向上冒泡到更不具体的元素(如其父元素),直到到达文档的根节点。然而,通过事件捕获,我们可以选择在事件...

    【JavaScript源代码】基于事件冒泡、事件捕获和事件委托详解.docx

    在JavaScript中,事件处理是网页交互的核心部分,而事件冒泡、事件捕获和事件委托则是JavaScript事件模型中的三个重要概念。理解这三个概念对于优化网页性能和编写高效代码至关重要。 事件冒泡是指事件从最深的节点...

    js事件监听机制(事件捕获)总结

    在IE浏览器中,没有标准的捕获事件,只有冒泡事件处理。对于其他大多数现代浏览器,它们支持W3C标准,允许开发者在捕获阶段拦截事件。在JavaScript中,可以通过在addEventListener方法中设置第三个参数为true来指定...

    JS中事件冒泡和事件捕获介绍

    1、冒泡事件: 事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。通俗来讲就是,就是当设定了多个div的嵌套时;即建立了父子关系,当父div与子div共同加入了onclick事件时,当触发了子div...

    js之事件冒泡,事件捕获,事件委托

    事件冒泡是事件传播的第二阶段,它发生在事件捕获之后。在事件冒泡阶段,事件会从目标节点开始,逐级向上传播,经过每个包含它的节点,直到到达DOM树的顶部(即window对象)。这种方式使得最具体的元素先响应事件,...

    js冒泡、捕获事件及阻止冒泡方法详细总结

    JavaScript中的事件处理机制主要包括两种模式:事件冒泡和事件捕获。这两个概念是理解JavaScript事件处理的关键,尤其在处理复杂的用户交互和DOM操作时显得尤为重要。 事件冒泡是指事件从最深的节点(子节点)开始...

    JS html事件冒泡和事件捕获操作示例

    本文实例讲述了JS html事件冒泡和事件捕获操作。分享给大家供大家参考,具体如下: 今天学习了事件冒泡和捕获,记录一下。...点击事件捕获冒泡实验</title> </head> <body> <div i

Global site tag (gtag.js) - Google Analytics