The event utility facilitates the create of event-driven applications in the browser by giving you a simplified interface for subscribing to DOM events and for examing properties of the browser's Event object.
事件工具优化了基于浏览器的事件驱动应用程序的创建.该工具能狗在Dom中订阅事件,能够查询浏览器对象的属性.该事件工具里面包含自定义事件对象, 通过自定义事件对象能够发布事件, 而订阅了该事件的页面能够做出相应的反应.事件工具有如下特征:
1. 提供灵活的方法将事件处理程序添加到一个或者多个元素上.
2. 自动延缓未出现对象的事件注册.
3. 范围纠正(automatic scop correction, optional scope assignment)
4. Automatic event object browser abstraction. 事件对象的自动抽象.也就是屏蔽了不同浏览器事件对象不一样的问题.有点像GDI.
5. 可以将任意的对象发送给某一个事件.
6.访问事件属性.
7.自动清楚listener.
8. 创建和订阅自定义事件.
9. 检测到DOM元素时自动执行某一函数.
使用Event and Custom Event Utilities必须包含如下代码:
<!-- Namespace source file -->
<script type="text/javascript" src="yahoo.js" ></script>
<!-- Event source file -->
<script type="text/javascript" src="event.js" ></script>
Event and Custom Event 组件定义为YAHOO.util.Event and YAHOO.util.CustomEvent.
事件处理程序注册延迟
在页面完全加载以前, 如果你注册某一个元素某一事件的处理程序,事件工具会尝试去定位该元素. 如果该元素找不到, 工具会周期性地检查该元素,直到window.onload事件触发为止.延迟注册只在以元素ID的方式注册时才发生,因为如果你尝试去注册一个不存在的DOM对象, 那么组件是没有办法直到你访问的对象是哪一个.
自动修正范围
利用IE的attachEvent方法注册的事件处理程序在window范围内执行, 所以在你的回调函数(事件处理程序)中特别变量"this"指"window"对象. 这个非常没用.更让人恼火的是IE中的事件对象没有提供可靠的方法标识事件注册的元素.基于标准的浏览器都支持"currentTarget"属性, 但这个属性在IE中不存在. 默认地, Event Utiliy自动调整执行的范围,以便" this "能够指向事件注册的元素,以满足W3c-compliant标准的浏览器. 除此之外, 事件订阅者能够重写该范围, 以便this能够指向 自定义对象.
自动事件对象抽象
回调接收到的第一个参数都是事件对象. 这不需要查看windwo.event.
发送任意对象到事件处理程序
在面向对象的JavaScript开发中,指定一个自定义对象的成员方法去监听某一个事件,访问内部某一个属性或者执行内部方法是非常普遍的. 由于事件处理程序在元素的范围内,而不是在监听方法父对象范围内被执行, 自定义对象的属性通过 "this"是不能获得的. Event Utility能够使你直接将自定义对象传递给监听程序,这样你就不用使用其它方法去访问该自定义对象. 将自定义对象作为addListenr方法的第四个参数, 作为回调函数的第二个参数即可(第一个事件对象本身).