JavaScript Event学习第八章:事件的顺序
2010-03-30 00:00:00 来源:WEB开发网这会阻止这个事件的冒泡阶段。阻止事件的捕获极端基本上是不可能的。我也想知道为啥。
一个完整的跨浏览器的代码如下:
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
Tags:JavaScript Event 学习
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接