DOM事件总结(事件处理程序的类型及浏览器的兼容性)

时间:2022-08-26 15:16:06

事件处理:

1、HTML事件处理程序

例子:

<input type="button" id="btn" value="click me" onclick="alert('Hello!');">

或者:

<input type="button" id="btn" value="click me" onclick="show()">
<script>
function show(){
alert(
"Hello world!");
}
</script>

缺点:HTML与JavaScript代码紧密耦合在一起,不方便修改。

 

2、DOM零级处理程序

例子:

<input type="button" id="btn" value="click me">
<script>
var btn=document.getElementById("btn");
btn.onclick
=function(){
alert(
"....");
}
</script>

这段代码的作用是添加点击事件,若要取消点击事件,只需"btn.onclick=null;"即可。

 

3、DOM二级事件处理程序

  定义了两个方法:addEventListener()和removeEventListener(),分别是用于指定和删除事件处理程序的操作。

  两种方法都有三个参数:

  (1)要处理的事件名;

  (2)事件处理程序的函数;

  (3)布尔值:true(在捕获事件中调用);false(在冒泡事件中调用)。

例子:

var btn=document.getElementById("btn");
btn.addEventListener(
'click',function(){alert('Hello');},false);

要删除只能用removeEventListener(),而不能用“....=null”。

 

4、IE事件处理程序

  attachEvent()和detachEvent(),分别是添加和删除事件。

  两个参数:

  (1)要处理的事件名;

  (2)事件处理程序的函数。

  不使用第三个参数的原因是:IE8以及更早的浏览器版本只支持事件冒泡。

  用法:

btn.attachEvent('onclick',function(){.....});

注意是"onclick" "onmouseover" 还是用"click" "mouseover"等,有没有加"on"。

 

5、跨浏览器的事件处理程序

  做法是:所有的事件处理程序封装在一个对象内。

  如下代码:

/*
* @Author: 陈陈陈
* @Date: 2017-09-03 10:18:07
* @Last Modified by: 陈陈陈
* @Last Modified time: 2017-09-03 12:19:34
*/
var eventUtil{

/*添加事件处理程序 */
addHandler:
function(element,type,handler){//参数表元素、事件类型、函数
if(element.addEventListener){//DOM 2级事件处理程序
element.addEventListener(type,handler,false);//false表冒泡事件调用;true表捕获事件调用
}else if(element.attachEvent){//IE事件处理程序
element.attachEvent('on'+type,handler);//没有第三个参数的原因是:IE8及更早的浏览器版本只支持事件冒泡
}else{//DOM 0级事件处理程序
element['on'+type]=handler;
}
},

/*删除事件处理程序 */
removeHandler:
function(element,type,handler){//删除事件处理程序,参数表元素、事件类型、函数
if(element.removeEventListener){//DOM 2级事件处理程序
element.removeEventListener(type,handler,false);//false表冒泡事件调用;true表捕获事件调用
}else if(element.detachEvent){//IE事件处理程序
element.detachEvent('on'+type,handler);//没有第三个参数的原因是:IE8及更早的浏览器版本只支持事件冒泡
}else{//DOM 0级事件处理程序
element['on'+type]=null;
}
},

/*以下一些方法是关于事件对象的获取
改善浏览器的兼容性,将DOM事件对象和IE事件对象合并在一起
1、DOM的事件对象:
(1)type:事件类型
(2)target:事件目标
(3)stopPropagation()方法:阻止事件冒泡
(4)preventDefault()方法:阻止事件的默认行为

2、IE中的事件对象:
(1)type:事件类型
(2)srcElement:事件目标
(3)cancelBubble属性:阻止事件冒泡 true表示阻止冒泡,false表示不阻止
(4)returnValue属性:阻止事件的默认行为
*/

getEvent:
function(event){
return event?event:window.event;
},

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

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

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