要确定浏覽器是否支援DOM規定的HTML事件,可以使用如下代碼:
隻有根據DOM2級事件實作這些事件的浏覽器才傳回true,以非标準方式支援這些事件的浏覽器會傳回false;
目前主流的浏覽器(非IE)支援DOM2級建立的事件類型有:
1、UIEvents 一般化的UI事件
2、MouseEvents 一般化的滑鼠事件
3、MutationEvents 一般化的DOM變動事件
4、HTMLEvents 一般化的HTML事件
以鍵盤事件為例,在FireFox中調用createEvent方法并傳入KeyEvents建立鍵盤事件對象,然後調用initKeyEvent方法初始化事件,最後使用dispatchEvent來觸發事件,實際開發中需要相容各浏覽器,是以在一般先建立一個通用的事件對象:document.createEvent(“Events”),然後調用initEvent進行事件的初始化
Firefox浏覽器(Gecko引擎)中初始化事件的方法initKeyEvent方法接收10個參數:
type 要觸發的事件類型(String),如keypress、keydown
bubbles 是否冒泡(Boolean)
cancelable 是否可以取消該事件(Boolean)
view 與事件相關的視圖
ctrlKey 是否按下Ctrl鍵(Boolean),預設為false
shiftKey 是否按下了Shift鍵(Boolean),預設為false
keyCode 按下或釋放的鍵的鍵碼,對應keydown、keyup是有用的,預設值為0
charCode 通過按鍵生成的字元的ASCII編碼,這個參數對keypress有用,預設為0
ex: var evt = document.createEvent(“KeyEvents”); event.initKeyEvent(“keypress”, true, true, document.defaultView, false, false, false, false, 65, 65); dom.dispatchEvent(evt);
其它浏覽器(非IE)中,需要采用如下的方式:
var evt = document.createEvent(“Events”); evt.initEvent(type, bubbles, cancelable); evt.view = document.defaultView; evt.altKey = false; evt.ctrlKey = false; evt.shiftKey = false; evt.metaKey = false; evt.keyCode = 65; evt.charCode = 65;
檢測目前浏覽器是否支援這一類的事情,可以使用如下的方法判定:
document.implementation.hasFeature(“MutationEvents”, "2.0”)
前面講述的是在非IE中的實作方案,IE中實作起來較為簡單
滑鼠事件MouseEvents,隻需要統一使用document.createEvent(“MouseEvents”);需要使用initMouseEvent方法對事件進行初始化,參數由10個變為15個
type 事件類型(String),如“click”
cancelable 是否支援取消(Boolean)
view 與事件關聯的視圖
detail 與事件有關的詳細資訊
screenX 事件相對螢幕的X坐标
screenY 事件相對螢幕的Y坐标
clientX 事件相對視窗的X坐标
clientY 事件相對視窗的Y坐标
altKey 是否按下了Alt鍵(Boolean),預設為false
metaKey 是否按下了Meta鍵(Boolean),預設為false
button 按下的是滑鼠的左/右/中鍵
relatedTarget 與事件相關的對象,隻在模拟mouseover、mouseout時使用(對應IE中的fromElement、toElement)