DOM2級事件處理程序定義了兩個方法,用於處理指定和刪除事件處理程序的操做:addEventListener()和removeEventLisener()。
它們都接受三個參數:要處理的事件名、做爲事件處理程序的函數和一個布爾值。布爾值參數若是是true,表示在捕獲階段調用事件處理程序;若是是false,表示在冒泡階段調用事件處理程序。瀏覽器
IE實現了DOM中相似的兩個方法:attachEvent()和detachEvent()。
這兩個方法接受相同的兩個參數:事件處理程序名稱與事件處理程序函數。因爲IE8及更早版本只支持事件冒泡,因此經過attachEvent()添加的事件處理程序都會被添加到冒泡階段。函數
event || window.event
1.DOM
兼容DOM的瀏覽器會將一個event對象傳入到事件處理程序中。
2.IE
在使用DOM0級方法添加事件處理程序時,event對象最爲window對象的一個屬性存在,用window.event取得evnet對象。
若是事件處理程序是用attachEvent()添加的,那麼就會有一個event對象做爲參數被傳入程序函數中。
若是是經過HTML特性指定的事件處理程序,那麼還能夠經過一個名叫event的變量來訪問event對象。this
event.target || event.srcElement
1.DOM
target包含事件的實際目標。
2.IE
由於事件處理程序的做用域是根據指定它的方式來肯定的,因此this不必定會始終等於事件目標。於是,最好仍是使用event.srcElement比較保險。編碼
1.DOM
preventDefault()取消事件的默認行爲
2.IE
returnValue屬性至關於DOM中的preventDefault()方法,他們的做用都是取消給定事件的默認行爲。只要將returnValue設置爲false,就能夠阻止默認行爲。code
1.DOM
stopProgagation()取消事件的進一步捕獲或冒泡
2.IE
cancelBubble屬性與DOM中的stopPropagation()方法做用相同,都是用來中止事件冒泡的。對象
mouseover:事件的主目標是得到光標的元素,而相關元素是失去光標的元素。
mouserout:事件的主目標是失去光標的元素,而相關元素是得到光標的元素。
1.DOM
DOM經過event對象的relateTarget屬性提供了相關元素的信息
2.IE
IE8及以前的版本不支持getRelatedTarget屬性。
但在mouseover事件觸發時,IE的fromElement屬性中保存了相關元素
在mouseout事件觸發時,IE的toElement屬性中保存了相關元素。seo
對於mousedown和mouseup事件來講,在其event對象存在一個button屬性,表示按下或釋放的按鈕。
1.DOM
DOM的button屬性有3個,
0表示主鼠標鍵
1表示總監的鼠標按鈕(鼠標滾輪按鈕)
2表示次鼠標按鈕
2.IE
IE8以前變笨也提供了button屬性,但這個屬性的值和DOM有很大的差別
0:表示沒有按下按鈕
1:表示按下了主鼠標按鈕
2:表示按下了次鼠標按鈕
3:表示同時按下了主、次鼠標按鈕
4:表示按下了中間的鼠標按鈕
5:表示同時按下了主鼠標按鈕和中間的鼠標按鈕
6:表示同時按下了次鼠標按鈕和中間的鼠標按鈕
7:表示同時按下了三個鼠標按鈕事件
鍵碼:
在發生keydown和keyup事件時,event對象的keyCode屬性中會包含一個代碼,與鍵盤上一個特定的鍵對應。對數字字母字符鍵,keyCode屬性的值與ASCII碼中對應小寫字母或數字的編碼相同。
字符編碼:
charCode屬性只有在發生keypress事件時才包含值。
代碼以下:element
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; } }, getEvent: function(event){ return event?event:window.event; }, getTarget: function(event){ return event.target || event.srcElement; }, preventDefault: function(event){ if(event.preventDefault){ event.preventDefault(); }else{ event.returnValue = false; } }, stopProgagation: function(event){ if(event.stopProgagation){ event.stopProgagation(); }else{ event.cancelBubble = true; } }, getRelatedTarget: function(event){ if(event.relatedTarget){ return event.relatedTarget; }else if(event.toElement){ return event.toElement; }else if(event.fromElement){ return event.fromElement; }else{ return null; } }, getButton:function(event){ if(document.implementation.hasFeature("MouseEvents","2.0")){ return event.button; }else{ switch (event.button){ case 0: case 1: case 3: case 5: case 7: return 0; case 2: case 6: return 2; case 4: return 1; } } }, getCharCode: function(event){ if(typeof event.charCode == "number"){ return event.charCode; }else{ return event.keyCode; } } };