【js的DOM事件模型】
1、内联模型:直接将函数名作为HTML标签的某个时间和苏醒的属性值;
rg:<button onclick="func()">按钮</button>
缺点:weifan W3C 关于HTML与javaScript分离的基础原则;
2、脚本模型:在JS脚本中通过事件属性进行绑定;
eg:window.onload = function(){}
局限性:同一节点,只能保定一个同类型事件;
【JS中的DOM2事件模型】
1、添加事件绑定:
IE10之前: btn1.attachEvent("onclick",函数)
其他浏览器:butn1.addEventListener("click",函数,true/false);
参数三:false(默认),表示事件冒泡,true,表示时间捕获
兼容写法: if(btn1.attachEvent){
btn1.attachEvent();
}else{
butn1.addEventListener();
}
优点:同一节点,可以添加对个同类型事件的监听器;
2.取消事件绑定:
注:如果要去事件绑定,那么在绑定事件时,回调函数,必须使用有名函数,而不能使用匿名函数。因为在取消事件绑定时,需要传入函数名。
.removeEventListener("click",函数名);
.detachEvent("onclick",函数名);
【js中的事件流】
1、事件冒泡:当某DOM元素触发某时间是,会从当前DOM元素开始,诸葛触发其祖先元素的同类型事件,直到DOM根节点:
DOM模型,均为事件冒泡;
IE中使用.attachEvent()添加的时间,均为冒泡;
其他浏览器, .addEvrentListener添加的事件,当第三个参数是false时,为冒泡;
2、事件捕获:当某DOM元素触发某事件时,会从DOM根节点开始,逐个触发其祖先元素的同类型时间,直到触发哀悼当前元素位置,
只有使用addEvrentListener添加事件,并设置第三个参数为True时,才进行捕获;
↓ 当前元素 ↑
↓ ↑
冒 父元素 捕
↓ ↑
泡 爷爷元素 获
↓ ↑
DOM根节点
3、阻断事件冒泡:
IE浏览器中:将e.cancelBubble属性设为true;
其他浏览器:调用e.stopPropagation();方法
兼容写法:function myParagraphEventHandler(e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation(); //IE以外
} else {
e.cancelBubble = true; //IE
}
}
4、阻止默认事件:
IE浏览器中:将e.returnValue属性设为false;
其他浏览器:调用e.preventDefault();方法
兼容写法:function eventHandler(e) {
e = e || window.event;
// 防止默认行为
if (e.preventDefault) {
e.preventDefault(); //IE以外
} else {
e.returnValue = false; //IE
}
}