DOM 中的事件處理介紹

2022-10-07 06:15:08 字數 2562 閱讀 2906

該介面提供了 '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上,有兩種方法對事件物件進...