js事件跨浏览器解决问题的学习与总结

//定义一个EventUtil对象
var EventUtil = { 
//兼容浏览器注册事件处理程序
addHandler: function(element, type, handler){ 
// 该方法接受3个参数:要操作的元素,事件名称和事件处理程序函数 
if (element.addEventListener){ //检查传入的元素是否存在DOM2级方法 
element.addEventListener(type, handler, false); // 若存在,则使用该方法 
} 
else if (element.addEvent){ // 如果存在的是IE的方法 
element.attachEvent("on" + type, handler); //则使用IE的方法,注意,这里的事件类型必须加上"on"前缀。 
}
 else { // 最后一种可能是使用DOM0级 
element["on" + type] = hander; 
} 
}, 
//兼容浏览器取消事件处理程序
removeHandler: function(element, type, handler){ // 该方法是删除之前添加的事件处理程序 
if (element.removeEventListener){ //检查传入的元素是否存在DOM2级方法 
element.removeEventListener(type, handler, false); // 若存在,则使用该方法 
} 
else if (element.detachEvent){ // 如果存在的是IE的方法 
element.detachEvent("on" + type, handler); //则使用IE的方法,注意,这里的事件类型必须加上"on"前缀。 
}
 else { // 最后一种可能是使用DOM0及方法(在现代浏览器中,应该不会执行这里的代码) 
element["on" + type] = null; 
} 
},
//兼容浏览器获取浏览器事件对象的程序
getEvent:function(event) {
	return event?event:window.event;
},
//兼容浏览器获取事件来自哪个元素的程序
getElement: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;
	}
}
}
//下面是简单的使用上面的封装对象
window.onload=function(){
	var htmlobj = document.documentElement;
	var bodyobj = document.body;
	var alinkobj=document.getElementById(‘alink‘);
	 EventUtil.addHandler(bodyobj,‘click‘,function(){alert("我是body元素");});
         EventUtil.addHandler(alinkobj,‘click‘,function(){alert("我是alink元素");});
         EventUtil.addHandler(alinkobj,‘click‘,function(e){e=event||window.event;
			  	alert(EventUtil.getElement(e));});
         EventUtil.addHandler(alinkobj,‘click‘,function(e){e=event||window.event;
			  	alert(e.type);});

         EventUtil.addHandler(alinkobj,‘click‘,function(e){e=event||window.event;
			 	EventUtil.preventDefault(e);

			 });
        EventUtil.addHandler(alinkobj,‘click‘,function(e){e=event||window.event;
			 	  EventUtil.stopPropagation(e);

			 });
		}

(1)DOM中的事件对象

常用属性:

type:    代表事件的类型

target:   代表事件的实际目标

currentTarget:其事件处理程序当前正在处理事件的那个元素。

重要属性方法:

stopPropagation()  阻止事件冒泡

preventDefault()   阻止事件的默认行为

(2)IE中的事件对象

常用属性:

type属性        代表事件的类型

srcElement属性  代表获取事件的实际目标(类似与DOM中的target)

cancelBubble 属性  用于阻止事件冒泡,默认值为false,表示不阻止冒泡,true为阻止事件冒泡(与DOM中的 stopPropagation() 方法相同),

returnValue属性  用于阻止默认事件的行为,默认值为true,设置为false就可以取消事件的默认行为(与DOM中的 preventDefault()方法相同)。

时间: 2024-10-23 02:22:33

js事件跨浏览器解决问题的学习与总结的相关文章

js事件跨浏览器处理方案

js跨浏览器事件工具: //事件工具对象 var EventUtil = {}; //添加事件 EventUtil.addEvent = function(element,type,handle) { if(element.addEventListener) { //dom事件 element.addEventListener(type,handle,false); } else if(element.attachEvent) { element.attachEvent("on" +

JS 事件冒泡、捕获。学习记录

作为一个转行刚到公司的新人,任务不多,这一周任务全部消灭,闲暇的一天也别闲着,悄悄的看起了书.今天写一下JS的事件冒泡.捕获. 也是今天看的内容有点多了,有些消化不了,就随手记录一下.纯属自我理解,如果有不对,还请指导提出,小弟一定改正. 好了,话不多说.那么事件冒泡是什么? 举个例子 ul > li > div > p . 这个时候你点击P,他会一层一层的往上执行,直到最后绑定事件的元素.假如我们绑定事件在ul上,那么点击P,他就会逐级往上走,直到找到绑定事件的ul也会触发事件,那么在

Event事件跨浏览器封装

1 var Event = { 2 //注册事件 3 addEvent: function(element,type,handler){ 4 if(element.addEventListener){ //DOM2级 5 element.addEventListener(type,handler,false); //false为冒泡,true为捕获 6 }else if(element.attachEvent){ //IE 7 element.attachEvent("on"+type

JS-DOM2级事件对象跨浏览器处理(已封装)

1 var eventUill = { 2 //添加事件 3 addHander: function(element, type, handler) { 4 if(element.addEventListener) { 5 element.addEventListener(type, handler, false); 6 } else if(element.attachEvent) { 7 element.attachEvent('on' + type, handler); 8 } else {

跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现

postMessage 是 HTML5 新方法,它可以实现跨域窗口之间通讯.到目前为止,只有 IE8+, Firefox 3, Opera 9, Chrome 3和 Safari 4 支持,而本篇文章主要讲述 postMessage 方法与 message 事件跨浏览器实现. postMessage 方法 JSONP 技术不一样,前者是前端擅长跨域文档数据即时通讯,后者擅长针对跨域服务端数据通讯,postMessage 应用场景能说明这个区别: 应用场景举例 webOS 使用 iframe 嵌入

JavaScript 跨浏览器事件处理工具

/** * 跨浏览器事件处理工具.只支持冒泡.不支持捕获 * @author ([email protected]) */ var EventUtil = { getEvent: function (event) { return event || window.event; }, getTarget: function (event) { return event.target || event.srcElement; }, // 返回注册成功的监听器,IE中需要使用返回值来移除监听器 on:

跨浏览器图像灰度(grayscale)解决方案

E10开始抛弃了这种私有滤镜,但是还没有提供对标准CSSfilter的支持,所以说IE10以上版本的灰度图像,仍然是一个问题.2.W3c CSS filter方式CSS3中借鉴IE私有滤镜的方式提供了标准的CSS Filter方案,里面可以支持grayscale灰度.sepia褐色.saturate饱和度.hue-rotate色相旋转.invert反色.opacity透明度.brightness亮度.contrast对比度.blur模糊.drop-shadow阴影等十种效果.关于CSS3 Fil

解决SVG跨浏览器兼容性问题

Raphael JS:SVG/VML+JS实现跨浏览器的矢量图形实现方案 http://blog.csdn.net/tiewen/article/details/8535748 SVG那些小事儿 http://www.w3cfuns.com/article-5601506-1-1.html Raphaël—JavaScript Library http://raphaeljs.com/ Raphael JS:SVG/VML+JS实现跨浏览器的矢量图形实现方案

JS 事件(4)——跨浏览器的事件对象

跨浏览器的事件对象详解 封装事件对象 1 var event_util = { 2 //添加事件 3 addHandler: function(element, type, handler) { 4 if(element.addEventListener) { 5 element.addEventListener(type, handler, false); 6 } else if(element.attachEvent) { 7 element.attachEvent("on" +