JavaScirpt中的事件處理程序
事件處理在JS中可謂是點睛一筆,JS的事件處理程序使得JS成為了網頁交互層的第一把交椅。那麽,JS中有幾種事件處理程序呢?
1.DOM0級事件處理程序
通過JS指定事件處理程序的傳統方式,就是將一個函數添加給一個對象的事件處理程序。這種方式為現代所有的瀏覽器所用。原因一是方便簡單,原因二是可以實現跨瀏覽器。
1 var oA = document.getElementsByTagName("a")[0];
2 oA.onclick = function(){
3 alert(this.id);
4
5 }
我們通過一個doucment對象獲取到一個A標簽的引用,然後在這個引用上添加onclick事件,但是有一點需要註意
刪除事件處理程序可以通過一個空引用:
1 oA.onclick = null;
2.DOM2級事件處理程序
在“DOM2級事件”中定義了二個方法用來添加或者移除事件處理程序:
1.addEventListener();
2.removeEventListener();
這兩個方法的參數是一樣的,第一個是要添加的事件類型,第二個是事件處理程序的函數名(如果用的是匿名函數,則無法移除),第三個是一個布爾值,true代表在事件捕獲時期就添加該事件處理程序,false代表在事件冒泡時期添加該事件處理程序,一般都用false。兼容性的話,IE9+,Firefox,Safari,Chrome,和Opera支持DOM2級事件處理程序。
1 oA.addEventListener("click",handle,false);
2 oB.addEventListener("click",handle,false);
3
4 var handle = function(){
5 alert(this.id);
6 }
7
8 oA.removeEventListener("click",handle,false);
9 oB.removeEventListener("click",handle,false);
在這段代碼中,分別給oA和oB對象添加了click事件,在運行的時候,會先彈出oA的id,然後才是oB的id,這兩個事件處理程序會按他們自己的順序去執行
3.IE事件處理程序
在IE中實西現了和DOM中類似的兩個方法:
1.attachEvent();
2.detachEvent();
這兩個方法接受一樣的參數,第一個是事件名,第二個是事件處理程序函數,用這兩個方法會默認在事件冒泡中添加事件處理程序。
1 oA.attachEvent("onclick",handle);
2 oB.attachEvent("onclick",handle);
3
4 var handle = function(){
5 alert(this.id);
6 }
7
8 oA.detachEvent("onclick",handle);
9 oB.detachEvent("onclick",handle);
使用這兩個函數需要註意一下幾點:
1.第一個參數是帶on的,即onclick,這點不同於DOM2級的兩個方法。
2.作用域是不同的,這裏的this,不同於DOM0級的作用域。在IE中的事件處理程序,會在全局作用域下運行,也就是說這裏的this不再代表事件添加的對象,而是一直代表著window對象。
3.順序也不同與DOM方法,這裏是會先執行第二句,然後再執行第一句,和DOM2級中的順序是相反的,是反過來執行的。
4.同樣的,匿名函數不能移除事件,最好用有名字的函數。
目前支持IE事件處理程序的瀏覽器有IE和Opera。
- DOM0級事件處理程序
- DOM2級事件處理程序
- IE事件處理程序
JavaScirpt中的事件處理程序