跨浏览器的事件对象介绍


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 相关文章推荐
js函数的引用, 关于内存的开销
Sep 17 Javascript
解决js图片加载时出现404的问题
Nov 30 Javascript
js获取鼠标位置实例详解
Dec 09 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
基于jquery编写分页插件
Mar 07 Javascript
d3.js实现立体柱图的方法详解
Apr 28 Javascript
JQuery Ajax 异步操作之动态添加节点功能
May 24 jQuery
vue 2.0封装model组件的方法
Aug 03 Javascript
对Angular中单向数据流的深入理解
Mar 31 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
May 07 Javascript
django中使用vue.js的要点总结
Jul 07 Javascript
vue+element树组件 实现树懒加载的过程详解
Oct 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中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php mysql like 实现多关键词搜索的方法
2016/10/29 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
python使用Image处理图片常用技巧分析
2015/06/01 Python
python数据结构之图的实现方法
2015/07/08 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
python 装饰器的基本使用
2021/01/13 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
工厂保洁员岗位职责
2013/12/04 职场文书
阳光体育活动总结
2014/04/30 职场文书
小学社会实践活动总结
2014/07/03 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
学生会辞职信
2015/03/02 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
golang import自定义包方式
2021/04/29 Golang
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server
Python中的程序流程控制语句
2022/02/24 Python
python中的sys模块和os模块
2022/03/20 Python