事件流(1.事件冒泡流 2.事件捕获流 3.DOM事件流)
- IE的事件流是事件冒泡流,事件冒泡流由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。
- Netscape Communicator的事件流的事件捕获流,事件捕获流是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在事件到达预定目标之前捕获它。
- DOM2级事件流包含三个阶段(事件捕获阶段,处于目标阶段和事件冒泡阶段)。
事件处理程序
<input onclick='fn()'/>
btn.onclick=fn;
btn.onclick=null;
btn.addEventListener('click',fn,false);
btn.removeEventListener('click',fn,false);
- IE事件处理程序
IE中使用DOM2和DOM0的事件处理程序this指向不同 DOM0中指向所属元素,DOM2中指向window
btn.attachEvent('onclick',fn)
bn.detachEvent('onclick',fn)
let 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;
}
}
};
事件对象
- DOM事件对象
兼容DOM的浏览器会将一个event对象传入到事件处理程序中。所有事件都有如下成员:
- bubbles(事件是否冒泡)
- cancelable(是否可以取消事件的默认行为)
- currentTarget(当前正在处理事件的元素)
- defaultPrevented(为true表示已经调用preventDefault())
- detail(与事件相关的细节信息)
- eventPhase(调用事件处理程序的阶段 1捕获 2目标阶段 3冒泡)
- preventDefault 取消事件的默认行为
- stopImmediatePropagation 取消事件的进一步捕获和冒泡
- target 事件的目标
- trusted 为true表示事件是浏览器生成的,为false是开发人员创建的
- type 被触发的事件类型
- view 与事件关联的抽象视图
- IE事件对象
IE中的event取决于指定事件处理程序的方法 DOM0时,event作为windows对象的一个属性存在。DOM2中attachEvent既可以通过window.event取得,也可直接通过参数取到。所有事件对象都包含如下所列属性和方法:
- cancelBubble 将其设为true就可取消事件冒泡,与stopPropagation()方法相同
- returnValue 同preventDefault()相同
- srcElement 与target属性相同
- type 被触发的事件类型