jquery 事件对象属性小结


Posted in Javascript onApril 27, 2010

使用事件自然少不了事件对象.  因为不同浏览器之间事件对象的获取, 以及事件对象的属性都有差异, 导致我们很难跨浏览器使用事件对象.

jQuery中统一了事件对象,  当绑定事件处理函数时,  会将jQuery格式化后的事件对象作为唯一参数传入:

$("#testDiv").bind("click", function(event) { });

关于event对象的详细说明, 可以参考jQuery官方文档: http://docs.jquery.com/Events/jQuery.Event

jQuery事件对象将不同浏览器的差异进行了合并, 比如可以在所有浏览器中通过 event.target 属性来获取事件的触发者(在IE中使用原生的事件对象, 需要访问event.srcElement).

下面是jQuery事件对象可以在扩浏览器支持的属性:

属性名称 描述举例
type 事件类型.如果使用一个事件处理函数来处理多个事件, 可以使用此属性获得事件类型,比如click. $("a").click(function(event) { alert(event.type); });
target 获取事件触发者DOM对象 $("a[href=http://google.com]").click(function(event) { alert(event.target.href); });
data 事件调用时传入额外参数. $("a").each(function(i) { $(this).bind('click', {index:i}, function(e){ alert('my index is ' + e.data.index); }); });
relatedTarget 对于鼠标事件, 标示触发事件时离开或者进入的DOM元素 $("a").mouseout(function(event) { alert(event.relatedTarget); });
currentTarget 冒泡前的当前触发事件的DOM对象, 等同于this. $("p").click(function(event) { alert( event.currentTarget.nodeName ); }); 结果:P
pageX/Y 鼠标事件中, 事件相对于页面原点的水平/垂直坐标. $("a").click(function(event) { alert("Current mouse position: " + event.pageX + ", " + event.pageY ); });
result 上一个事件处理函数返回的值 $("p").click(function(event) { return "hey" }); $("p").click(function(event) { alert( event.result ); }); 结果:”hey”
timeStamp 事件发生时的时间戳. var last; $("p").click(function(event) { if( last ) alert( "time since last event " + event.timeStamp - last ); last = event.timeStamp; });

上面是jQuery官方文档中提供的event对象的属性. 在”jQuery实战”一书中还提供了下面的多浏览器支持的属性, 时间关系我没有尝试每一个属性, 大家可以帮忙验证是否在所有浏览器下可用:

属性名称 描述
altKey Alt键是否被按下. 按下返回true
ctrlKey ctrl键是否被按下, 按下返回true
metaKey Meta键是否被按下, 按下返回true.meta键就是PC机器的Ctrl键,或者Mac机器上面的Command键
shiftKey Shift键是否被按下, 按下返回true
keyCode 对于keyup和keydown事件返回被按下的键. 不区分大小写, a和A都返回65.对于keypress事件请使用which属性, 因为which属性跨浏览时依然可靠.
which 对于键盘事件, 返回触发事件的键的数字编码. 对于鼠标事件, 返回鼠标按键号(1左,2中,3右).
screenX/Y 对于鼠标事件, 获取事件相对于屏幕原点的水平/垂直坐标

 

事件对象除了拥有属性, 还拥有事件. 有一些是一定会用到的事件比如取消冒泡 stopPropagation() 等.下面是jQuery事件对象的函数列表:

名称 说明举例
preventDefault() 取消可能引起任何语意操作的事件. 比如元素的href链接加载, 表单提交以及click引起复选框的状态切换. $("a").click(function(event){ event.preventDefault(); // do something });
isDefaultPrevented() 是否调用过  preventDefault() 方法 $("a").click(function(event){ alert( event.isDefaultPrevented() ); event.preventDefault(); alert( event.isDefaultPrevented() ); });
stopPropagation() 取消事件冒泡 $("p").click(function(event){ event.stopPropagation(); // do something });
isPropagationStopped() 是否调用过  stopPropagation() 方法 $("p").click(function(event){ alert( event.isPropagationStopped() ); event.stopPropagation(); alert( event.isPropagationStopped() ); });
stopImmediatePropagation() 取消执行其他的事件处理函数并取消事件冒泡.如果同一个事件绑定了多个事件处理函数, 在其中一个事件处理函数中调用此方法后将不会继续调用其他的事件处理函数. $("p").click(function(event){ event.stopImmediatePropagation(); }); $("p").click(function(event){ // This function won't be executed });
isImmediatePropagationStopped() 是否调用过  stopImmediatePropagation() 方法 $("p").click(function(event){ alert( event.isImmediatePropagationStopped() ); event.stopImmediatePropagation(); alert( event.isImmediatePropagationStopped() ); });

这些函数中  stopPropagation()  是我们最长用的也是一定会用到的函数. 相当于操作原始event对象的event.cancelBubble=true来取消冒泡.

Javascript 相关文章推荐
jQuery1.6 正式版发布并提供下载
May 05 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
Mar 19 Javascript
jQuery实现的网页左侧在线客服效果代码
Oct 23 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
Jul 22 Javascript
JavaScript 继承详解(五)
Oct 11 Javascript
用jmSlip编写移动端顶部日历选择控件
Oct 24 Javascript
jQuery网页定位导航特效实现方法
Dec 19 Javascript
Node.js复制文件的方法示例
Dec 29 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
JS实现在文本指定位置插入内容的简单示例
Dec 22 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
javascript全局自定义鼠标右键菜单
Dec 08 Javascript
Google排名中的10个最著名的 JavaScript库
Apr 27 #Javascript
基于jquery的让页面控件不可用的实现代码
Apr 27 #Javascript
JQuery上传插件Uploadify使用详解及错误处理
Apr 27 #Javascript
JavaScript中常见陷阱小结
Apr 27 #Javascript
javascript 动态修改样式和层叠样式表代码
Apr 27 #Javascript
js 绑定带参数的事件以及手动触发事件
Apr 27 #Javascript
javascript 模式设计之工厂模式学习心得
Apr 27 #Javascript
You might like
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
动易数据转成dedecms的php程序
2007/04/07 PHP
php自定义函数之递归删除文件及目录
2010/08/08 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
php中static和const关键字用法分析
2016/12/07 PHP
php探针不显示内存解决方法
2019/09/17 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
js中判断控件是否存在
2010/08/25 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
python多进程实现文件下载传输功能
2018/07/28 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
NumPy统计函数的实现方法
2020/01/21 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
高一地理教学反思
2014/01/18 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
爱心倡议书范文
2014/05/12 职场文书
追悼会答谢词范文
2015/09/29 职场文书