跨瀏覽器的事件對象

DOM2級事件處理程序:

DOM2級事件處理程序定義了兩個方法,用於處理指定和刪除事件處理程序的操做:addEventListener()removeEventLisener()
它們都接受三個參數:要處理的事件名、做爲事件處理程序的函數和一個布爾值。布爾值參數若是是true,表示在捕獲階段調用事件處理程序;若是是false,表示在冒泡階段調用事件處理程序。瀏覽器

IE事件處理程序

IE實現了DOM中相似的兩個方法:attachEvent()detachEvent()
這兩個方法接受相同的兩個參數:事件處理程序名稱與事件處理程序函數。因爲IE8及更早版本只支持事件冒泡,因此經過attachEvent()添加的事件處理程序都會被添加到冒泡階段。函數

getEvent:

event || window.event
1.DOM
兼容DOM的瀏覽器會將一個event對象傳入到事件處理程序中。
2.IE
在使用DOM0級方法添加事件處理程序時,event對象最爲window對象的一個屬性存在,用window.event取得evnet對象。
若是事件處理程序是用attachEvent()添加的,那麼就會有一個event對象做爲參數被傳入程序函數中。
若是是經過HTML特性指定的事件處理程序,那麼還能夠經過一個名叫event的變量來訪問event對象。this

getTarget:

event.target || event.srcElement
1.DOM
target包含事件的實際目標。
2.IE
由於事件處理程序的做用域是根據指定它的方式來肯定的,因此this不必定會始終等於事件目標。於是,最好仍是使用event.srcElement比較保險。編碼

preventDefault:

1.DOM
preventDefault()取消事件的默認行爲
2.IE
returnValue屬性至關於DOM中的preventDefault()方法,他們的做用都是取消給定事件的默認行爲。只要將returnValue設置爲false,就能夠阻止默認行爲。code

stopProgagation:

1.DOM
stopProgagation()取消事件的進一步捕獲或冒泡
2.IE
cancelBubble屬性與DOM中的stopPropagation()方法做用相同,都是用來中止事件冒泡的。對象

getRelatedTarget

mouseover:事件的主目標是得到光標的元素,而相關元素是失去光標的元素。
mouserout:事件的主目標是失去光標的元素,而相關元素是得到光標的元素。
1.DOM
DOM經過event對象的relateTarget屬性提供了相關元素的信息
2.IE
IE8及以前的版本不支持getRelatedTarget屬性。
但在mouseover事件觸發時,IE的fromElement屬性中保存了相關元素
在mouseout事件觸發時,IE的toElement屬性中保存了相關元素。seo

getButton

對於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:表示同時按下了三個鼠標按鈕事件

getCharCode

鍵碼:
在發生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;
        }
    }
};
相關文章
相關標籤/搜索