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 相关文章推荐
jQuery 对象中的类数组操作
Apr 27 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 Javascript
jQuery弹出层插件Lightbox_me使用指南
Apr 21 Javascript
js实现跨域的多种方法
Dec 25 Javascript
jQuery中队列queue()函数的实例教程
May 03 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
Vue响应式添加、修改数组和对象的值
Mar 20 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
JS实现随机抽选获奖者
Nov 07 Javascript
vue全局使用axios的操作
Sep 08 Javascript
微信小程序 接入腾讯地图的两种写法
Jan 12 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实现给图片加灰色半透明效果的方法
2014/10/20 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
js function使用心得
2010/05/10 Javascript
JS实现div居中示例
2014/04/17 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
js实现删除li标签一行内容
2019/04/16 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
详解Django中的权限和组以及消息
2015/07/23 Python
python实现BackPropagation算法
2017/12/14 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
优秀医生事迹材料
2014/02/12 职场文书
安全标准化实施方案
2014/02/20 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL