跨浏览器的事件对象介绍


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数组插入一条记录的代码
Aug 30 Javascript
javascript循环变量注册dom事件 之强大的闭包
Sep 08 Javascript
Javscript调用iframe框架页面中函数的方法
Nov 01 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
JavaScript与jQuery实现的闪烁输入效果
Feb 18 Javascript
js解决movebox移动问题
Mar 29 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
Dec 08 Javascript
Three.js基础部分学习
Jan 08 Javascript
iview日期控件,双向绑定日期格式的方法
Mar 15 Javascript
vue 组件高级用法实例详解
Apr 11 Javascript
javascript显示动态时间的方法汇总
Jul 06 Javascript
使用Vue实现一个树组件的示例
Nov 06 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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
php 团购折扣计算公式
2011/11/24 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
让焦点自动跳转
2006/07/01 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
python中返回矩阵的行列方法
2018/04/04 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python实现单机五子棋
2020/08/28 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
期末总结的个人自我评价
2013/11/02 职场文书
销售演讲稿范文
2014/01/08 职场文书
12岁生日演讲稿
2014/05/14 职场文书
生日宴会策划方案
2014/06/03 职场文书
2014和解协议书范文
2014/09/15 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
入党自荐书范文
2015/03/05 职场文书
超市督导岗位职责
2015/04/10 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
redis数据一致性的实现示例
2022/03/18 Redis