1. 程式人生 > >DOM0級事件處理與DOM2級事件處理的區別

DOM0級事件處理與DOM2級事件處理的區別

DOM是分等級的,分別是DOM0,1,2,3級別越高,語句越高階。

一、DOM0級事件處理

DOM0級事件處理方式就是講一個函式賦值給一個事件處理屬性,如:

box.onclick = function(){
	alert("我是box");
}

就是把函式賦值給了box的onclick屬性,當然每個元素都有自己處理程式的屬性,例如:onmousedown、onmouseup等,

on**這種事件繫結方法屬於DOM0級事件繫結。

DOM0級事件有什麼特點:

1.DOM0級事件只能觸發事件冒泡階段不能觸發事件捕獲階段。
box2.onclick = function(){
	alert("我是box2");
}
box3.onclick = function(){
	alert("我是box3");
}
box1.onclick = function(){
	alert("我是box1");
}

  不管我們怎麼改變事件的繫結順序,不影響我的彈出框。box3然後box2最後box1。為什麼?因為onclick只能觸發事件冒泡不能觸發事件捕獲。因為事件冒泡是從事件流的最內層的元素依次往外層傳播。

2.同一元素繫結相同的事件,後面的會覆蓋前面的。
box3.onclick = function(){
	alert("A");
}
box3.onclick = function(){
	alert("B");
}
box3.onclick = function(){
	alert("C");
}

點選box3只會彈出C。因為on**方法相當於給元素新增屬性。後面寫的會覆蓋先寫的。

多說一點:還可以通過行內式給元素繫結事件。

3.this指的是事件流傳播到的這個元素,就元素本身。

二、DOM2級事件處理

DOM2繫結事件的方法addEeventListener();

DOM2刪除事件的方法removeEeventListener();

addEventListener(事件名事件執行語句,布林值)

事件名:click不用書寫on,只需要書寫click

事件執行語句:就是函式,可以是匿名函式,也是有名函式。

布林值:true表示事件捕獲false表示事件冒泡。

DOM2級事件繫結的特點:

1、對於精確的元素不區分事件捕獲和事件冒泡,事件的執行順序是按照繫結順序來的。

2、同一個元素繫結相同的事件,後面的不會覆蓋前面的。因為DOM2

級事件繫結不是給元素新增屬性是直接新增的事件。等同於給一個元素綁定了多個事件。

box2.addEventListener("click",function(){
	console.log("c");
},false);
box2.addEventListener("click",function(){
	console.log("D");
},false);
box2.addEventListener("click",function(){
	console.log("E");
},false);

以上“c”、“D”、“E”都會輸出。

另外,在DOM2級事件處理中通過addEventListener()新增的匿名函式無法移除,要先給函式命名:

 function handler(){
        console.log("可以移除的函式");
    }
    btn.addEventListener('click',handler, false);
    btn.removeEventListener('click',handler,false);