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 相关文章推荐
跨浏览器的设置innerHTML方法
Sep 18 Javascript
基于jquery的Repeater实现代码
Jul 17 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
Sep 28 Javascript
容易被忽略的JS脚本特性
Sep 13 Javascript
Jquery插件easyUi表单验证提交(示例代码)
Dec 30 Javascript
ExtJS如何设置与获取radio控件的选取状态
Jan 22 Javascript
通过隐藏iframe实现文件下载的js方法介绍
Feb 26 Javascript
利用Keydown事件阻止用户输入实现代码
Mar 11 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
Dec 23 Javascript
解决vuex刷新状态初始化的方法实现
Aug 15 Javascript
vue中在vuex的actions中请求数据实例
Nov 08 Javascript
JS数组方法concat()用法实例分析
Jan 18 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网站在线人数统计
2008/04/09 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
vant时间控件使用方法详解
2020/12/24 Javascript
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
django反向解析URL和URL命名空间的方法
2018/06/05 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
如何使用Python 打印各种三角形
2019/06/28 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
python与pycharm有何区别
2020/07/01 Python
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
村官学习十八大感想
2014/01/15 职场文书
读书小明星事迹材料
2014/05/03 职场文书
毕业设计说明书
2014/05/07 职场文书
安全环保演讲稿
2014/08/28 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫