跨浏览器的事件对象介绍


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 相关文章推荐
js 数组实现一个类似ruby的迭代器
Oct 27 Javascript
JavaScript判断变量是否为空的自定义函数分享
Jan 31 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
一道常被人轻视的web前端常见面试题(JS)
Feb 15 Javascript
Ajax使用原生态JS验证用户名是否存在
May 26 Javascript
javascript 面向对象function详解及实例代码
Feb 28 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
Mar 13 Javascript
基于angular2 的 http服务封装的实例代码
Jun 29 Javascript
js+html5实现半透明遮罩层弹框效果
Aug 24 Javascript
weex里Vuex state使用storage持久化详解
Sep 09 Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 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 信息采集程序代码
2009/03/17 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
jquery禁用右键示例
2014/04/28 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
进一步探究Python中的正则表达式
2015/04/28 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
Python流程控制 while循环实现解析
2019/09/02 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
数控机械专业个人的自我评价
2014/01/02 职场文书
个人租房协议书范本
2014/09/30 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2016年小学中秋节活动总结
2016/04/05 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
MySQL8.0的WITH查询详情
2021/08/30 MySQL