1. 程式人生 > >JavaScirpt中的事件處理程序

JavaScirpt中的事件處理程序

刪除 方式 als size cor clas remove function window

事件處理在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事件,但是有一點需要註意

,添加事件那一段代碼如果沒有執行,就不會指定事件處理程序,所以,代碼要在頁面中的a標簽之後。

刪除事件處理程序可以通過一個空引用:

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,這兩個事件處理程序會按他們自己的順序去執行

。註意,這裏是click事件,沒有on

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中的事件處理程序