跨浏览器的事件对象介绍


Posted in Javascript onJune 27, 2012
var eventUtil = { 
getEvent : function(event){ 
return event ? event : window.event; 
}; 
getTarget : function(event){ 
return event.target || event.srcElement; 
}; 
preventDefault : function(event){ 
if(event.preventDefault){ 
event.preventDefault(); 
}else{ 
event.returnValue = false; 
} 
}; 
stopPropagation : function(event){ 
if(event.stopPropagation){ 
event.stopPropagation(); 
}else{ 
event.cancelBubble = true; 
} 
}; 
};

当使用一个DOM兼容的浏览器时,event 变量仅仅是传入并被返回,在IE中event参数将是undefined ,因此window.event将会被返回,所以采用eventUtil.getEvent()方法无论在dom还是IE上event返回值都是可用的。

同理第二个方法,getTarge()方法,先检测event对象的target属性,如果存在,则返回targe,若为IE浏览器则返回srcElement属性。保证兼容性。

btn.onclick = function(event){ 
event = EventUtil.getEvent(event); 
var target = EventUtil.getTarget(event); 
};

第三个方法,preventDefault ()方法,当event对象传入时,先检测event对象的preventDefault()方法是否可用,若可用则调用preventDefault方法,若不可用将event的returnValue 设置为false。

例如:


var link = document.getElementById("myLink"); 
link.onclick = function(event){ 
event = EventUtil.getEvent(event); 
EventUtil.preventDefault(event); 
};

这段代码阻止了一个link标签的默认行为,event对象来自于EventUtil的getEvent方法的返回值 并作为preventDefault()方法的传入参数。

第四个方法stopPropagation(),用同样的方法,首先尝试DOM方法,之后尝试cancelBubble属性,例如下面的代码:

var btn = document.getElementById("myBtn"); 
btn.onclick = function(event){ 
alert("Clicked"); 
event = EventUtil.getEvent(event); 
EventUtil.stopPropagation(event); 
}; 
document.body.onclick = function(event){ 
alert("Body clicked"); 
};

记得这个方法可能阻止事件在浏览器的冒泡阶段 或者 同时阻止事件在浏览器的冒泡和捕获阶段。
Javascript 相关文章推荐
列表内容的选择
Jun 30 Javascript
载入进度条 效果
Jul 08 Javascript
JS中动态添加事件(绑定事件)的代码
Jan 09 Javascript
javascript中的缓动效果实现程序
Dec 29 Javascript
js实现动态创建的元素绑定事件
Jul 19 Javascript
微信js-sdk界面操作接口用法示例
Oct 12 Javascript
实现easyui的datagrid导出为excel的示例代码
Nov 10 Javascript
Javascript中从学习bind到实现bind的过程
Jan 05 Javascript
关于express与koa的使用对比详解
Jan 25 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 Javascript
JavaScript函数Call、Apply原理实例解析
Feb 17 Javascript
一行JavaScript代码如何实现瀑布流布局
Dec 11 Javascript
UI Events 用户界面事件
Jun 27 #Javascript
浅谈Javascript鼠标和滚轮事件
Jun 27 #Javascript
浅谈Javascript事件模拟
Jun 27 #Javascript
JS时间选择器 兼容IE6,7,8,9
Jun 26 #Javascript
基于jquery & json的省市区联动代码
Jun 26 #Javascript
jquery命令汇总,方便使用jquery的朋友
Jun 26 #Javascript
Jvascript学习实践案例(开发常用)
Jun 25 #Javascript
You might like
PHP文本操作类
2006/11/25 PHP
FCKeditor的安装(PHP)
2007/01/13 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
utf8的编码算法 转载
2006/12/27 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
python数据结构之二叉树的建立实例
2014/04/29 Python
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
django中的图片验证码功能
2019/09/18 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
python实现扫雷小游戏
2020/04/24 Python
Python加速程序运行的方法
2020/07/29 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
家长评语大全
2014/01/22 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
生日赠语
2015/06/23 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server