跨浏览器的事件对象介绍


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 相关文章推荐
Java 正则表达式学习总结和一些小例子
Sep 13 Javascript
js中call与apply的用法小结
Dec 28 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
Feb 25 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
Oct 12 Javascript
vue-cli webpack 开发环境跨域详解
May 18 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
利用ES6实现单例模式及其应用详解
Dec 09 Javascript
微信小程序WebSocket实现聊天对话功能
Jul 06 Javascript
vue实现图片预览组件封装与使用
Jul 13 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 Javascript
Vue 自适应高度表格的实现方法
May 13 Javascript
如何开发一个渐进式Web应用程序PWA
May 10 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/06/01 PHP
PHP 面向对象实现代码
2009/11/11 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
php学习笔记之面向对象
2014/11/08 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
jQuery元素选择器用法实例
2014/12/23 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
js密码强度检测
2016/01/07 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
jquery+css实现简单的图片轮播效果
2017/08/07 jQuery
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
TensorFlow的权值更新方法
2018/06/14 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
精彩的推荐信范文
2013/11/26 职场文书
廉政教育心得体会
2014/01/01 职场文书
志愿者活动总结报告
2014/06/27 职场文书
美术学专业求职信
2014/07/23 职场文书
党的群众路线教育实践活动学习笔记范文
2014/11/06 职场文书
2014年工会工作总结
2014/11/12 职场文书
英文慰问信
2015/02/14 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
Python time库的时间时钟处理
2021/05/02 Python
Java集成swagger文档组件
2021/06/28 Java/Android