FF,chrome与IE的事件处理程序
2014-11-03 21:07
351 查看
今天学习了js的事件处理程序,IE与FF,chrome,safari,opera的处理事件方法不同,FF,chrome,safari,opera支持addEventLisener,而addEventListener是属于DOM2定义的函数,IE不支持DOM2,因此要想实现跨浏览器的事件处理,需要针对IE与FF,chrome,safari,opera进行不一样的处理。
1、事件流
首先要记录的就是事件流了,事件流有三个阶段,事件捕获阶段、处于目标阶段和事件冒泡阶段。处于目标阶段,其事件处理中被看成冒泡阶段的一部分。
DOM0级事件处理程序,直接对元素赋一个事件处理程序属性,如:
var btn = document.getElementById("btn");
btn.onclick=handler;
DOM2级事件处理程序,使用addEventListener和removeEventListener,如对ele绑定click事件:
ele.addEventListener("click",handler,false); //当第三个参数为false,表示冒泡阶段,当为true,表示事件捕获阶段;
2、IE的事件处理程序
IE不支持addEventListener,但可以用attachEvent和detachEvent处理事件,如对ele绑定click事件:
ele.attachEvent("onclick",handler);
注意:是onclick,而不是click;使用attachEvent,其处理事件的函数里的this为全局对象,即this==window。
可以验证下:
var ul = document.getElementById("ul");
ul.attachEvent("onclick",function(event){
console.log(this == window);
});
1 var EventUtil = {
2 addEvent:(function(type,handle,element){
3 if(element.addEventListener){
4 element.addEventListener(type,handle,false);
5 }else if(element.attachEvent){
6 element.attachEvent("on"+type,handle); //IE
7 }else{
8 element["on"+type]=handle;
9 }
}),
removeEvent:(function(type,handle,element){
if(element.removeEventListener){
element.removeEventListener(type,handle,false);
}else if(element.detachEvent){
element.detachEvent("on"+type,handle); //IE
}else{
element["on"+type] = null;
}
}),
getEvent:(function(event){
return event?event:window.event;
}),
getTarget:(function(event){
if(event.target){
return event.target;
}else if(event.srcElement){
return event.srcElement; //IE
}
}),
preventDefault:(function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
}),
stopPropagation:(function(event){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}),
relatedElement:(function(event){
if(element.relatedElement){
return element.relatedElement;
}else if(element.toElement){
return element.toElement; //IE mouseOut
}else if(element.fromElement){
return element.fromElement; //IE mouseOver
}
})
};View Code
1、事件流
首先要记录的就是事件流了,事件流有三个阶段,事件捕获阶段、处于目标阶段和事件冒泡阶段。处于目标阶段,其事件处理中被看成冒泡阶段的一部分。
DOM0级事件处理程序,直接对元素赋一个事件处理程序属性,如:
var btn = document.getElementById("btn");
btn.onclick=handler;
DOM2级事件处理程序,使用addEventListener和removeEventListener,如对ele绑定click事件:
ele.addEventListener("click",handler,false); //当第三个参数为false,表示冒泡阶段,当为true,表示事件捕获阶段;
2、IE的事件处理程序
IE不支持addEventListener,但可以用attachEvent和detachEvent处理事件,如对ele绑定click事件:
ele.attachEvent("onclick",handler);
注意:是onclick,而不是click;使用attachEvent,其处理事件的函数里的this为全局对象,即this==window。
可以验证下:
var ul = document.getElementById("ul");
ul.attachEvent("onclick",function(event){
console.log(this == window);
});
1 var EventUtil = {
2 addEvent:(function(type,handle,element){
3 if(element.addEventListener){
4 element.addEventListener(type,handle,false);
5 }else if(element.attachEvent){
6 element.attachEvent("on"+type,handle); //IE
7 }else{
8 element["on"+type]=handle;
9 }
}),
removeEvent:(function(type,handle,element){
if(element.removeEventListener){
element.removeEventListener(type,handle,false);
}else if(element.detachEvent){
element.detachEvent("on"+type,handle); //IE
}else{
element["on"+type] = null;
}
}),
getEvent:(function(event){
return event?event:window.event;
}),
getTarget:(function(event){
if(event.target){
return event.target;
}else if(event.srcElement){
return event.srcElement; //IE
}
}),
preventDefault:(function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
}),
stopPropagation:(function(event){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble = true;
}
}),
relatedElement:(function(event){
if(element.relatedElement){
return element.relatedElement;
}else if(element.toElement){
return element.toElement; //IE mouseOut
}else if(element.fromElement){
return element.fromElement; //IE mouseOver
}
})
};View Code
相关文章推荐
- 跨浏览器的事件处理程序//IE、chrome
- 按钮提交事件处理(以下方法兼容ie,firefox,chrome)
- firefox 和 ie 事件处理的细节,研究,再研究-----书写同时兼容ie和ff的事件处理代码
- firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
- firefox 和 ie 事件处理的细节,研究,再研究-----书写同时兼容ie和ff的事件处理代码
- IE事件处理程序与其他浏览器之区别
- 简易tabs切换组件,兼容IE、FF、CHROME,支持click、mouseover等事件,无组件依赖
- 事件处理程序DOM0,DOM2,IE的区别总结
- IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素
- onmusewheel事件(兼容IE,FF,opera,safari,chrome)
- 关于 input file 事件处理 IE / chrome 下的区别
- [JS] - onmusewheel事件(兼容IE,FF,opera,safari,chrome)
- 鼠标滚动事件onscroll在firefox/chrome/Ie中执行次数的问题处理
- scroll事件在IE,chrome,FF中的行为表现
- firefox 和 ie 事件处理的细节-----书写同时兼容ie和ff的事件处理代码
- IE 11 注册事件处理程序终于回归W3C标准addEventListener
- 原生js绑定和解绑事件,兼容IE,FF,chrome
- 鼠标滚动事件onscroll在firefox/chrome/Ie中执行次数的问题处理
- IE事件处理程序及跨浏览器解决
- firefox 和 ie 事件处理的细节,研究,再研究-----书写同时兼容ie和ff的事件处理代码 (转)