跨浏览器的事件对象介绍


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实现快速排序(自已编写)
Dec 19 Javascript
jquery easyui滚动条部分设置介绍
Sep 12 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
jQuery简单实现隐藏以及显示特效
Feb 26 Javascript
运用js教你轻松制作html音乐播放器
Apr 17 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
Apr 27 jQuery
Bootstrap实现的标签页内容切换显示效果示例
May 25 Javascript
Vue列表页渲染优化详解
Jul 24 Javascript
JavaScript执行环境及作用域链实例分析
Aug 01 Javascript
nuxt.js中间件实现拦截权限判断的方法
Nov 21 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
Jun 24 Javascript
使用vue实现通过变量动态拼接url
Jul 22 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实现随机生成易于记忆的密码
2015/06/19 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
基于jquery实现等比缩放图片
2014/12/03 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
python对url格式解析的方法
2015/05/13 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Django Rest framework权限的详细用法
2019/07/25 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
大学生的网上创业计划书
2013/12/31 职场文书
先进集体事迹材料
2014/02/17 职场文书
幼儿园秋游感想
2014/03/12 职场文书
我爱我家教学反思
2014/05/01 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
资料员岗位职责
2015/02/10 职场文书
客房领班岗位职责
2015/02/11 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers