跨浏览器的事件对象介绍


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 相关文章推荐
jquery复选框CHECKBOX全选、反选
Aug 30 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
Javascript Object 对象学习笔记
Dec 17 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
Jun 08 Javascript
正则表达式,替换所有HTML标签的简单实例
Nov 28 Javascript
关于vue.js v-bind 的一些理解和思考
Jun 06 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
Aug 27 Javascript
VUE预渲染及遇到的坑
Sep 03 Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 Javascript
vue页面切换过渡transition效果
Oct 08 Javascript
ES6基础之数组和对象的拓展实例详解
Aug 22 Javascript
javascript中正则表达式语法详解
Aug 07 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远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
php一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
微信小程序实现底部导航
2018/11/05 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
python中的多重继承实例讲解
2014/09/28 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python全栈之列表数据类型详解
2019/10/01 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
Python流程控制常用工具详解
2020/02/24 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
小学生演讲稿
2014/01/12 职场文书
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
村庄绿化方案
2014/05/07 职场文书
作风建设整改方案
2014/10/27 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
债务纠纷起诉书
2015/05/20 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python