跨浏览器的事件对象介绍


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 相关文章推荐
使用JavaScript修改浏览器URL地址栏的实现代码
Oct 21 Javascript
Javascript连接多个数组不用concat来解决
Mar 24 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
jQuery焦点图插件SaySlide
Dec 21 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
Jul 27 Javascript
JavaScript中Array方法你该知道的正确打开方法
Sep 11 Javascript
vue绑定事件后获取绑定事件中的this方法
Sep 15 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
Apr 11 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
Apr 23 Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 Javascript
JavaScript命名空间模式实例详解
Jun 20 Javascript
vuex实现购物车功能
Jun 28 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
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
Python守护进程和脚本单例运行详解
2017/01/06 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
python+OpenCV实现图像拼接
2020/03/05 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
模具毕业生推荐信
2014/02/15 职场文书
课程改革实施方案
2014/03/16 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
python获取带有返回值的多线程
2022/05/02 Python