跨浏览器的事件对象介绍


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 相关文章推荐
取得父标签
Nov 14 Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 Javascript
兼容IE和FF的图片上传前预览js代码
May 28 Javascript
JavaScript 学习笔记之操作符
Jan 14 Javascript
javascript实现获取字符串hash值
May 10 Javascript
特殊日期提示功能的实现方法
Jun 16 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
几种响应式文字详解
May 19 Javascript
JavaScript 日期时间选择器一些小结
Apr 02 Javascript
js中this的指向问题归纳总结
Nov 28 Javascript
Vue.js实现开发购物车功能的方法详解
Feb 22 Javascript
在vue中created、mounted等方法使用小结
Jul 21 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 stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
js new Date()实例测试
2019/10/31 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python之re操作方法(详解)
2017/06/14 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
Django实现文件上传下载功能
2019/10/06 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
寒假家长评语大全
2014/04/16 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL