什么是事件对象?
在触发DOM上的事件时都会产生一个对象
一、(非IE)事件对象event#
1、DOM中的事件对象
(1)、type属性 用于获取事件类型
(2)、target属性 用于获取事件目标
(3)、stopPropagation() 阻止事件冒泡
(4)、perventDefault() 阻止默认行为
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>事件流</title>
</head>
<body>
<div id="box">
<input type="button" id="btn" onclick = "showMessage();" value="按钮" >
<input type="button" id="btn2" value="按钮2" >
<input type="button" id="btn3" value="按钮3" >
<a href="event.html" id="go">跳转</a>
</div>
<script>
var btn3 = document.getElementById("btn3");
var box= document.getElementById("box");
var go= document.getElementById("go");
function showMessage(event){
// alert(event.type);
alert(event.target.nodeName);
event.stopPropagation();//阻止事件冒泡
}
function showBox(){
alert("这是放按钮的盒子");
}
function stopGoto(event){
event.stopPropagation();//阻止事件冒泡
event.preventDefault();//阻止默认行为
}
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;
}
}
}
//box下面有 3个按钮和a链接
//点击btn3的时候 dom下会有(非IE下)会有事件冒泡,也就是当前btn3点击是弹出click;外层的box也会触发事件 弹出click;
eventUtil.addHandler(btn3,'click',showMessage);
eventUtil.addHandler(box,'click',showBox);
eventUtil.addHandler(go,'click',stopGoto);
//eventUtil.removeHandler(btn3,'click',showMessage);
</script>
二、IE事件对象
1、DOM中的事件对象
(1)、type属性 用于获取事件类型
(2)、srcElement属性 用于获取事件目标
(3)、cancelBubble() 阻止事件冒泡
(设置为true 阻止冒泡,false 不阻止冒泡)
(4)、returnValue() 阻止默认行为
function showMessage(event){
/*alert(event.type);
alert(event.target.nodeName);
event.stopPropagation();*/
event = event || window.event;//兼容ie更早版本
var ele= event.target ||event.srcElement
alert(ele);
event.stopPropagation();
}
例子:去掉a 的默认事件 阻止冒泡
index.html
<html>
<head>
<title>事件流</title>
<meta charset="utf-8">
<script src="js/event.js"></script>
<script src="js/script.js"></script>
</head>
<body>
<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="event.html" id="go">跳转</a>
</div>
</body>
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'),
box=document.getElementById('box');
eventUtil.addHandler(box,'click',function(){
alert('我是整个父盒子');
});
eventUtil.addHandler(go,'click',function(e){
//e=eventUtil.getEvent(e);
e=e || window.event;
alert(eventUtil.getElement(e).nodeName);
eventUtil.preventDefault(e);
eventUtil.stopPropagation(e);
});
}
实例2:根据所学知识,实现点击页面中的登录按钮,显示登录层(使用DOM2级监听事件哦!
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{margin:0;padding:0;}
.head{font-size:12px;padding:6px 0 0 10px;}
#login_box{width:300px;height:150px;background:#eee;
border:1px solid #ccc;position:absolute;left:50%;top:50%;margin-left:-150px;margin-top:-75px;display:none;}
#login_box p{height:20px;border-bottom:1px solid #ccc;font-size:12px;padding:6px 0 0 5px;font-weight:bold;}
#close{width:14px;height:14px;background:url(close.png) no-repeat;position:absolute;right:4px;top:6px;}
</style>
<script>
window.onload=function(){
var login_btn=document.getElementById('login'),
login_box=document.getElementById('login_box'),
close=document.getElementById('close');
// 封装添加事件监听程序
function addEvent(ele,type,hander){
if(ele.addEventListener){
ele.addEventListener(type,hander,false);
}else if(ele.attachEvent){
ele.attachEvent('on'+type,hander);
}else{
ele['on'+type]=hander;
}
}
// 显示登录层函数
function showLogin(){
login_box.style.display='block';
}
// 隐藏登录层函数
function hideLogin(){
login_box.style.display='none';
}
//点击登录按钮显示登录层
addEvent(login_btn,'click',showLogin);
//点击关闭按钮隐藏登录层
addEvent(close,'click',hideLogin);
}
</script>
</head>
<body>
<div class="head">亲,您好!<input type="button" value="登 录" id="login"></div>
<div id="login_box">
<p>用户登录</p><span id="close"></span>
</div>
</body>
</html>
网友评论