当前位置: 代码迷 >> 综合 >> jQuery事件的旅程原文 http://book.51cto.com/art/200807/79150.htm
  详细解决方案

jQuery事件的旅程原文 http://book.51cto.com/art/200807/79150.htm

热度:91   发布时间:2024-01-09 12:02:40.0

当页面上发生一个事件时,每个层次上的DOM元素都有机会处理这个事件。以下面的页面模型为例:

  

当在浏览器中形象化地呈现这些由嵌套的代码构成的元素时,我们看到的效果如图3-8所示。

 

举例来说,如果单击了页面中的锚元素,那么<div>、<span>和<a>全都应该得到响应这次单击的机会。毕竟,这3个元素同时都处于用户鼠标的指针之下。

允许多个元素响应单击事件的一种策略叫做事件捕获 。在事件捕获的过程中,事件首先会交给最外层的元素,接着再交给更具体的元素。在这个例子中,意味着单击事件首先会传递给<div>,然后是<span>,最后是<a>,如图3-9所示。

 

提示 从技术上说,在浏览器对事件捕获的实现中,每个的元素都会注册并侦听发生在它们后代元素中的事件。这里提供的近似情况非常接近于我们的需求。

另一种相反的策略叫做事件冒泡。即当事件发生时,会首先发送给最具体的元素,在这个元素获得响应机会之后,事件会向上冒泡到更一般的元素。在我们的例子中,<a>会首先处理事件,然后按照顺序依次是<span>和<div>,如图3-10所示。

 

毫不奇怪,不同的浏览器开发者们最初采用的是不同的事件传播模型。因而,最终出台的DOM标准规定应该同时使用这两种策略:首先,事件要从一般到具体进行捕获,然后,事件再通过冒泡返回DOM树的顶层。而事件处理程序可以注册到这个过程中的任何一部分 。

并不是所有浏览器都为了与新标准保持一致而进行了更新。而且,对于那些支持捕获的浏览器来说,通常必须明确启用才行 。为了提供跨浏览器的一致性,jQuery始终会在模型的冒泡阶段注册事件处理程序 。因此,我们总是可以假定最具体的元素会首先获得响应事件的机会。

  相关解决方案