以下方法兼容IE8-跨浏览器处理事件

2023-08-03 2068阅读

温馨提示:这篇文章已超过598天没有更新,请注意相关的内容是否还可用!

写js最常见的场景就是不断兼容各个版本的浏览器。其中,最令人沮丧的是IE系列。虽然jquery前期解决了很多麻烦,但随着最近jquery逐渐淡出,原生兼容的方法就显得更加重要了。众所周知,IE8是一个分水岭。然而,在 IE8 中却并非如此,如下所示。注册事件使用attachEvent,释放事件使用detachEvent。因此,一些比较老的项目在维护或者增加新功能的时候,就得自己写一套兼容的事件。代码处理,参考:java. 另外,因为在事件注册中,我们最常使用的就是事件对象,而IE8以下的浏览器中获取这个对象的方法与主流浏览器略有不同,所以也可以写入到整个span中浏览器处理事件:jquery

写js最常见的场景就是不断兼容各个版本的浏览器。 其中,最令人沮丧的是IE系列。 虽然jquery前期解决了很多麻烦,但随着最近jquery逐渐淡出,原生兼容的方法就显得更加重要了。 javascript

1. 事件注册兼容:

众所周知,IE8是一个分水岭。 除IE8及其以下浏览器外,chrome和firefox基本都支持addEventListener的方法来注册事件,removeEventListener的方法来移除事件。

然而,在 IE8 中却并非如此,如下所示。 注册事件使用attachEvent,释放事件使用detachEvent。 因此,一些比较老的项目在维护或者增加新功能的时候,就得自己写一套兼容的事件。 代码处理,参考:java

var EventUtil = {
				addHandler:function(element,type,handler){
					//绑定事件
					//Chrome Firefox IE9等 addEventListener 
					//IE8及IE8如下的浏览器 attachEvent 
					if(element.addEventListener){
						element.addEventListener(type,handler,false);
					}else if (element.attachEvent) {
						element.attachEvent("on"+ type,handler);
					} else{
						element["on"+type] = handler 
					}
				},
				removeHandler: function(element,type,handler){
					//移除事件
					//Chrome Firefox IE9等 
					//IE8及IE8如下的浏览器 
					if(element.removeEventListener){
						element.removeEventListener(type,handler,false);
					}else if (element.detachEvent) {
						element.detachEvent("on"+type,handler);
					} else{
						element["on"+type] = handler
					}
				}
			}

2.Event对象的兼容性

另外,因为在事件注册中,我们最常使用的就是事件对象,而IE8以下的浏览器中获取这个对象的方法与主流浏览器略有不同,所以也可以写入到整个span中浏览器处理事件:jquery

getTarget: function(event) {
					return event.target || event.srcElement;
				},

3. 冒泡和默认行为控制的兼容性

在addEventListener中,另一个常用的技术是冒泡机制和对浏览器元素默认行为的控制。 这两种行为基于IE8也分为两类代码,所以也需要兼容:web

(1)防止起泡:

stopPropagation: function(event) {
					if(event.stopPropagation) {
						event.stopPropagation()
					} else {
						event.cancelBubble = true;
					}
				}

(2)取消默认行为:

preventDefault: function(event) {
					if(event.preventDefault) {
						event.preventDefault();
					} else {
						event.returnValue = false;
					}
				}

4. 最终整合

关于整个js时间的跨浏览器处理,可以抽象成一个对象来封装,最终代码如下:chrome

var EventUtil = {
				addHandler: function(element, type, handler) {
					//绑定事件
					//Chrome Firefox IE9等 addEventListener 
					//IE8及IE8如下的浏览器 attachEvent 
					if(element.addEventListener) {
						element.addEventListener(type, handler, false);
					} else if(element.attachEvent) {
						element.attachEvent("on" + type, handler);
					} else {
						element["on" + type] = handler
					}
				},
				removeHandler: function(element, type, handler) {
					//移除事件
					//Chrome Firefox IE9等 
					//IE8及IE8如下的浏览器 
					if(element.removeEventListener) {
						element.removeEventListener(type, handler, false);
					} else if(element.detachEvent) {
						element.detachEvent("on" + type, handler);
					} else {
						element["on" + type] = handler
					}
				},
				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;
					}
				}

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]