事件流:
事件冒泡:即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档)。
事件捕获:不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件。
DOM2级事件处理程序:
.addEventListener(); .removeEventListener();
在IE浏览器中不起作用!IE事件处理程序:
.attachEvent(); .detachEvent();
跨浏览器常用事件处理程序:
var eventUtil = {
//添加句柄
addHandler:function(element,type,handler){
if(element.addEventListener){ //DOM2级事件监听
element.addEventListener(type,handler,false);
}else if(element.attachEvent){ //IE浏览器事件监听
element.attachEvent(‘on‘+type,handler);
}else{ //旧版浏览器事件监听
element[‘on‘+type]=handler;
}
},
//删除句柄
removeHandler:function(element,type,handler){
if(element.removeEventListener){ //DOM2级事件监听
element.removeEventListener(type,handler,false);
}else if(element.detachEvent){ //IE浏览器事件监听
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;
}
}
}
使用举例:eventUtil.addHandler(元素ID,‘click‘,函数名);
eventUtil.removeHandler(元素ID,‘click‘,函数名);
DOM.preventDefault()方法:阻止事件的默认行为,比如:<a href=‘#‘>超链接</a>
IE中用returnValue属性阻止事件的默认行为:设置为false表示阻止事件的默认行为
获取事件目标:
DOM.target. IE.srcElement.
比如: event = event || window.event ; //因为与旧版浏览器的区别
var ele = event.target || event.srcElement ; //因为DOM与IE的区别
DOM .stopPropagation()方法:用于阻止事件冒泡
IE用cancelBubble属性阻止时间冒泡:设置为true表示阻止冒泡,设置为false表示不阻止冒泡