读jq之八(原生事件对象的修复及扩充)
由于各个浏览器中原生事件对象的 差异性 ,多数 JS库/框架 都或多或少的对原生事件对象进行了修复及扩充。
比如,停止事件冒泡IE用 cancelBubble ,标准浏览器则用? stopPropagation 。
获取事件源对象,IE用 srcElement,标准浏览器则用 target诸如此类。
jQuery 对原生事件对象的修复和扩充主要使用 jQuery.Event 类和 jQuery.event.fix 方法。
?
?
它主要做了以下工作
1,event = jQuery.Event( originalEvent ); 该句创建了一个jQuery.Event类的实例对象,该对象修复及扩充上面刚刚提到了。
2, 一个循环将原生事件对象的所有属性拷贝给 1 中的event对象。for ( var i = this.props.length, prop; i; ) { prop = this.props[ --i ]; event[ prop ] = originalEvent[ prop ];}?
3, 统一事件源对象为 target 。
4, 统一事件相关对象为 relativeTarget 。
5, 扩充了pageX, pageY,这两个属性首次在Firefox中引入的。不支持该属性的浏览器使用clientX/Y计算得到。
6, 扩充了 which,使用它获取键盘按键值(keyCode)。这个属性也是在Firefox引入的。
7, 修复了metaKey。
8, 扩充了which,使用它获取鼠标按键值
细心的人可能注意到了,jQuery获取键盘按键值和鼠标按键值都是采用which。它没有向其它属于一样去兼容W3C已有标准 (button)。这一点我在 读jq之七? 及 各浏览器中鼠标按键值的差异 做了详细分析。
好了,整个jQuery事件对象就是如此..
以上源码摘自 jQuery1.4.4 。?
1 楼 pfans 2010-12-07 项目中正用jquery,分析的很好。 2 楼 select*from爱 2010-12-10 zhouyrt,去知识库搞个专栏吧