該介面提供了 'addeventlistener' 和 'removeeventlistener' 方法,用來繫結或解綁乙個 eventlisteners 介面到乙個 eventtarget。
dom 2 events 中定義了 event 介面,用來提供事件的上下文資訊,它提供了若干標準屬性和方法。 實現 event 介面的物件一般作為第乙個引數傳入事件處理函式,以用來提供當前事件相關的一些資訊。
事件註冊
根據 dom 2 events 中描述,節點使用 'addeventlistener' 和 'removeeventlistener' 方法繫結和解綁事件***,但 ie6 ie7 ie8 不支援這兩個方法, 而使用 'attachevent' 和 'detachevent' 方法作為替代方案,opera 兩類方法都支援。chrome safari firefox 只支援標準方法。
為了解決瀏覽器相容問題,可以自定義函式來解決。例如:
複製** **如下:
var eventutil = else if (element.attachevent) else
}, removehandler: function (element, type, handler) else if (element.detachevent) else
} };
關於 'addeventlistener' 和 'attachevent' 有幾點需要注意:
ie 不支援在捕獲階段觸發事件***,'attachevent' 方法沒有提供引數說明是否響應在捕獲階段觸發的事件;
'addeventlistener' 和 'attachevent' 都可以註冊多個事件***;
在 firefox chrome safari opera 中給同一事件註冊同乙個事件***多次,重複註冊的會被丟棄;而在 ie 中重複註冊的事件***會被重複執行多次;
當給同一元素註冊了多個事件***的時候,ie6 ie7 的事件***執行順序是隨機的,ie8 是倒序的,firefox chrome safari opera 是順序的;
當元素註冊的事件***中有非法的事件***時(非函式),在 ie firefox 中會丟擲異常,而在 chrome safari opera 中則會忽略非法的事件***,繼續執行其他的事件***。
事件物件
在ie中,事件物件是作為乙個全域性變數來儲存和維護的。 所有的瀏覽器事件,不管是使用者觸發的,還是其他事件, 都會更新window.event 物件。 所以在**中,只要輕鬆呼叫 window.event 就可以輕鬆獲取 事件物件, 再 event.srcelement 就可以取得觸發事件的元素進行進一步處理。
對於標準的 dom 處理來說, 事件物件卻不是全域性物件,一般情況下,是現場發生,現場使用,把事件物件自動傳遞給對應的事件處理函式。 在**中,函式的第乙個引數就是事件物件了。
為了解決相容性問題,通常在**中如下處理:
複製** **如下:
function handler(e)
需要注意的是,使用 ,注意,這裡的 event 不是形參,而是實參,必須名為 event。這樣 foo 函式就可以得到事件引數了。
第二,不修改註冊的**,在事件處理方法上進行處理。關鍵在於此時實際上存在事件物件,只不過沒有傳遞給 foo 函式罷了,我們可以找到呼叫 foo 函式的那個函式,當然這是乙個系統函式,沒有關係,通過 foo.caller 可以程式設計客棧取得當前呼叫 foo 函式的函式,這個函式的第乙個引數就是事件物件,所以,我們可以這樣取得這個事件物件了。foo.caller.arguments[0]。
注意:
只有在使用 attachevent 方法註冊事件***的時候,ie 才支援使用事件***傳入的第乙個引數作為事件物件的方式;
chrome safari opera 兩種獲取事件物件的方式都支援;
firefox 只支援獲取事件物件的標準方式。
事件物件的屬性
ie 對事件物件的標準屬性和方法支援有限,針對大部分屬性和方法,ie 都提供了一套替代非標準的替代方案; 而 firefox chrome safari opera 除了全面支援事件物件的標準屬性和方法外,還在不同程度上支援了 ie 提供的非標準替代方案。
使用特性判斷使用與標準對應的非標準方法及屬性 www.cppcns.com
target srcelement
prycdfaeventdefault() returnvalue
stoppropagation() cancelbubble
relatedtarget fromelement toelement
例如:
複製** **如下:
getevent: function (event) ,
gettarget: function (event) ,
preventdefault: function (event) else
}, stoppropagation: function (event) else }
sd9011: 事件模型在各瀏覽器中存在差異
本文標題: dom 中的事件處理介紹
本文位址:
DOM 中的事件處理
根據 w3c dom 2 events 描述,eventtarget 介面被所有支援 dom 事件模型的節點 node 實現。該介面提供了 addeventlistener 和 removeeventlistener 方法,用來繫結或解綁乙個 eventlisteners 介面到乙個 eventta...
DOM事件處理
一 事件流 可以形象理解為 當我們指向一組同心圓的圓心時,所指的其實是這一組同心圓,而不只是同心圓組中位於最裡層的圓 1.事件冒泡 觸發事件的標籤 即最裡層的標籤 最先感知到事件的發生,然後逐層向外傳遞事件,2.事件捕獲 與事件冒泡的感知方向正好相反,現在很少用 二 事件處理程式 1.html事件處...
JS筆記 歸納 DOM中的事件處理程式
在觸發dom上的某個時間是,會產生乙個事件物件event,這個物件中包含著所有與時間有關的資訊。包括導致事件的元素 事件的型別一急其他與特定事件相關的資訊。例如,滑鼠操作導致的事件物件中,會包含滑鼠位置的資訊,而鍵盤操作導致的事件物件中,會包含於按下的鍵有關的資訊。在dom上,有兩種方法對事件物件進...