WEB开发网
开发学院网页设计JavaScript JavaScript Event学习第八章:事件的顺序 阅读

JavaScript Event学习第八章:事件的顺序

 2010-03-30 00:00:00 来源:WEB开发网   
核心提示: 这会阻止这个事件的冒泡阶段,阻止事件的捕获极端基本上是不可能的,JavaScript Event学习第八章:事件的顺序(6),我也想知道为啥,一个完整的跨浏览器的代码如下:1functiondoSomething(e)<br>{<br>if(!e)vare=window.

这会阻止这个事件的冒泡阶段。阻止事件的捕获极端基本上是不可能的。我也想知道为啥。

一个完整的跨浏览器的代码如下:

1 function doSomething(e)<br>{<br>    if (!e) var e = window.event;<br>    e.cancelBubble = true;<br>    if (e.stopPropagation) e.stopPropagation();<br>}<br>

在不支持cancelBubble的浏览器里面设置也不会有啥问题。浏览器会创建一个这样的属性。当然是没啥用的,只是为了安全。

currentTarget

我们之前讲过,一个事件包含target或者srcElement包含一个发生事件的元素的引用。在我们的例子是element2,因为用户点击了他。

理解在捕获和冒泡过程中这个target是不会改变的非常重要:他一直指向element2.

但是假设我们注册了下面的事件处理程序:

1 element1.onclick = doSomething;<br>element2.onclick = doSomething;<br>

如果用户点击element2那么doSomething()执行了两次。那么你怎样知道那个HTML元素处理着这个事件呢?target/scrElement也不能给出答案,从事件一开始就一直指向element2.

为了解决这个问题W3C添加了currentTarget属性。它包含一个正在处理的事件的HTML元素的引用:就是我们想要的那个。不幸的是微软模式没有类似的属性。

你也可以用this关键字。在这个例子里就是指向正在处理的事件的HTML元素,就先currentTarget。

微软模式的问题

但是当你使用微软的事件注册模型,this关键字不是只想HTML元素的。然后又没有一个像currentTarget类似的属性,这就意味着如果你这么做:

1 element1.attachEvent('onclick',doSomething)<br>element2.attachEvent('onclick',doSomething)<br>

你就不知道那个HTML元素正在处理事件。这是微软的事件注册模式最严重的问题所以就根本不要用他,即使是那些只在IE/win下的程序。

我希望微软能够尽快添加一个类似currentTarget的属性或者遵循标准?我们设计急需啊。

原文地址:http://www.quirksmode.org/js/events_order.html

文章出处:http://beiyu.cnblogs.com

编缉推荐阅读以下文章

  • JavaScript Event学习补遗:addEventSimple
  • JavaScript Event学习第十一章:按键的检测
  • JavaScript Event学习第十章:一些可替换的事件对
  • JavaScript Event学习第九章:鼠标事件
  • JavaScript Event学习第七章:事件属性
  • JavaScript Event学习第六章:事件的访问
  • JavaScript Event学习第五章:高级事件注册模型
  • JavaScript Event学习第四章:传统的事件注册模型
  • JavaScript Event学习第三章:早期的事件处理程序
  • JavaScript Event学习第二章:Event

上一页  1 2 3 4 5 6 

Tags:JavaScript Event 学习

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接