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 相关文章推荐
javascript 解析后的xml对象的读取方法细解
Jul 25 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
Nov 07 Javascript
JSON传递bool类型数据的处理方式介绍
Sep 18 Javascript
JavaScript DOM基础
Apr 13 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 Javascript
jquery实现左右轮播图效果
Sep 28 jQuery
详解如何实现一个简单的 vuex
Feb 10 Javascript
解决vue打包项目后刷新404的问题
Mar 06 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
Feb 26 Javascript
vuex actions异步修改状态的实例详解
Nov 06 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
Nov 09 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
Jun 11 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
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
Chrome Web App开发小结
2014/09/04 PHP
PHP实现的简单缓存类
2015/07/29 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
如何用python 操作zookeeper
2020/12/28 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
如何利用find命令查找文件
2015/02/07 面试题
2014庆六一活动方案
2014/03/02 职场文书
公路绿化方案
2014/05/12 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
安全生产年活动总结
2014/08/29 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
三八妇女节致辞
2015/07/31 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python