jQuery-1.9.1源码分析:事件包装与上下文环境
"jQuery-1.9.1源码分析系列——事件系统之事件包装" 在深入探讨jQuery-1.9.1事件系统的事件包装时,我们首先要理解浏览器的原生事件模型及其局限性。原生事件对象是只读的,这使得jQuery无法直接修改它们以实现特定功能,例如在事件委托或上下文管理中。因此,jQuery选择创建自定义的事件对象,以扩展和增强原生事件的功能。 事件委托是一个常见的JavaScript编程技巧,它允许我们为父元素绑定一个事件处理器,以便处理子元素的事件。在这个场景中,假设我们有元素a和b,a是b的父元素,我们希望在点击a时触发fn函数。当点击事件冒泡到b时,我们需要确保fn在a的上下文中执行,而不是b的。为了实现这一点,jQuery在源码中使用了`apply`方法来改变函数的执行上下文。 这段代码展示了jQuery如何处理事件处理程序的执行: ```javascript ret = ( (jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem,args); ``` 这里,`apply`方法被用来改变函数执行的`this`值(即上下文),使其指向匹配的元素`matched.elem`(在这里是元素a)。同时,`args[0]`代表事件对象event,这样可以确保事件处理函数接收正确的事件对象。 为了确保事件对象的`currentTarget`属性反映实际的事件源(在这种情况下是元素a),jQuery在调用`apply`之前会修改`event.currentTarget`: ```javascript event.currentTarget = matched.elem; ``` jQuery事件系统区分了不同类型事件,如鼠标事件和键盘事件。对于这些事件,jQuery维护了三个关键属性集合: 1. 鼠标和键盘事件共享的属性,存储在`jQuery.event.props`中,包括`altKey`, `bubbles`, `cancelable`, `ctrlKey`, `currentTarget`, `eventPhase`, `metaKey`, `relatedTarget`, `shiftKey`, `target`, `timeStamp`, `view`, 和 `which`等。 2. 键盘事件独有的属性,定义在`jQuery.event.keyHooks.props`里,包括`char`, `charCode`, `key`, 和 `keyCode`。 3. 鼠标事件特有的属性,存于`jQuery.event.mouseHooks.props`,包含`button`, `buttons`, `clientX`, `clientY`, `offsetX`, `offsetY`, `pageX`, `pageY`, `screenX`, `screenY`, 和 `which`等。 这些属性集合允许jQuery在处理事件时,根据事件类型适当地填充和扩展事件对象,提供与原生事件兼容但更强大的功能。通过这样的事件包装,jQuery能够提供更灵活、一致且跨浏览器的事件处理机制,使得开发者在处理DOM交互时更加便捷。
下载后可阅读完整内容,剩余4页未读,立即下载
- 粉丝: 4
- 资源: 932
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解