码迷,mamicode.com
首页 > 其他好文 > 详细

DOM事件

时间:2016-08-19 20:53:02      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

一、事件流

(1)事件冒泡:通俗的讲就是由最具体的元素向上传播至最不具体的节点(文档);

(2)事件捕获:可以理解为事件冒泡反过来,由最不具体至最具体。

二、事件处理程序

(1)HTML事件处理程序

(2)DOM0级事件处理程序

(3)DOM2级事件处理程序

(4)IE级事件处理程序及跨浏览器解决

具体测试代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件处理程序</title>
</head>
<body>
<!-- <div id="box">
<input type="button" value="按钮" id="btn" onclick="alert(‘Hello‘)">
</div> -->
<div id="box">
<input type="button" value="按钮" id="btn" onclick="showMes()">
<input type="button" value="按钮2" id="btn2">
<input type="button" value="按钮3" id="btn3">
<a href="http://www.imooc.com/" id="go">跳转</a>
</div>
<script type="text/javascript">

//事件处理程序
//(1)HTML事件处理
function showMes(event){
alert(event.target.nodeName);
event.stopPropagation();//阻止冒泡
}
function showBox(){
alert("测试出现冒泡");
}
function stopGoto(event){
event.stopPropagation();//阻止冒泡
event.preventDefault();//阻止默认事件
}

//(2)DOM0级事件处理
var btn2=document.getElementById("btn2");//取得btn2按钮对象
var btn3=document.getElementById("btn3");
var box=document.getElementById("box");
var go=document.getElementById("go");
btn2.onclick=function(){ //给btn2添加onclick属性
alert(‘Hello‘);
}
btn2.onclick=‘null‘;//消除onclick属性

// //(3)DOM2级事件处理
// var btn3=document.getElementById("btn3");
// btn3.addEventListener(‘click‘,showMes,false);
// btn3.addEventListener(‘click‘,function(){
// alert(this.value);
// },false);
// //删除事件
// //btn3.removeEventListener(‘click‘,showMes,false);


// //(4)IE事件处理
// var btn3=document.getElementById("btn3");
// btn3.attachEvent(‘onclick‘,showMes);
// btn3.detachEvent(‘onclick‘,showMes);

var eventUtil={
//添加句柄
addHandler:function(element,type,handler){
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){
if (element.removeEventListener) {
element.removeEventListener(type,handler,false);
}else if (element.detachEvent) {
element.detachEvent(‘on‘+type,handler);
}else{
element[‘on‘+type]=‘null‘;
}
}
}

eventUtil.addHandler(btn3,‘click‘,showMes);//添加事件
eventUtil.addHandler(box,‘click‘,showBox);
eventUtil.addHandler(go,‘click‘,stopGoto);
// eventUtil.removeHandler(btn3,‘click‘,showMes);//删除事件

</script>
</body>
</html>

三、事件对象

(1)DOM中的事件对象

a.type属性:用于获取事件类型

b.target属性:用于获取事件目标

c.stopPropagation()方法 用于阻止事件冒泡

d.preventDefault()方法 阻止事件的默认行为

(2)IE中的事件对象

a.type属性:用于获取事件类型

b.srcElement属性:用于获取事件目标

c.cancelBubble()方法 用于阻止事件冒泡

d.returnValue()方法 阻止事件的默认行为

整理后的代码如下:

HTML文件.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="js/script.js"></script>
<script src="js/event.js"></script>
<title>事件处理程序</title>
</head>
<body>
<!-- <div id="box">
<input type="button" value="按钮" id="btn" onclick="alert(‘Hello‘)">
</div> -->
<div id="box">
<input type="button" value="按钮" id="btn" onclick="showMes()">
<input type="button" value="按钮2" id="btn2">
<input type="button" value="按钮3" id="btn3">
<a href="##" id="go">跳转</a>
</div>

</body>
</html>

event.js:

//跨浏览器解决
//事件对象

var eventUtil={
//添加句柄
//添加事件
addHandler:function(element,type,handler){
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){
if (element.removeEventListener) {
element.removeEventListener(type,handler,false);
}else if (element.detachEvent) {
element.detachEvent(‘on‘+type,handler);
}else{
element[‘on‘+type]=‘null‘;
}
},

//获取兼容所有浏览器的事件对象
getEvent:function(event){
return event?event:window.event;
},
//获取事件的类型
getType:function(event){
return event.type;
},
//获取事件来自于哪个元素
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;
}
}

}

script.js:

window.onload=function(){
var go=document.getElementById("go");
var box=document.getElementById("box");

eventUtil.addHandler(box,‘click‘,function(){
alert(‘我是整个父盒子‘);
});
eventUtil.addHandler(go,‘click‘,function(e){
e = e || window.event;
alert(eventUtil.getElement(e));
eventUtil.stopPropagation(e);
eventUtil.preventDefault(e);
});
}

 

DOM事件

标签:

原文地址:http://www.cnblogs.com/td-tkzc/p/5788864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!