原文出處: http://www.w3cfuns.com/notes/11861/e21736a0b15bceca0dc7f76d77c2fb5a.html 。 我拿出作者中的一段,感謝作者原創。
DOM中的事件模擬(自定義事件):
DOM3級還定義了自定義事件,自定義事件不是由DOM原生觸發的,它的目的是讓開發人員創建自己的事件。要創建的自定義事件可以由createEvent("CustomEvent"); 返回的對象有一個initCustomEvent()方法接收如下四個參數。
1)type:字符串,觸發的事件類型,自定義。例如 “keyDown”,“selectedChange”;
2)bubble(布爾值):標示事件是否應該冒泡;
3)cancelable(布爾值):標示事件是否可以取消;
4)detail(對象):任意值,保存在event對象的detail屬性中;
可以像分配其他事件一樣在DOM中分派創建的自定義事件對象。如:
var div = document.getElementById("myDiv");
EventUtil.addEventHandler(div,"myEvent", function () {
alert("div myEvent!");
});
EventUtil.addEventHandler(document,"myEvent",function(){
alert("document myEvent!");
});
if(document.implementation.hasFeature("CustomEvents","3.0")){
var e = document.createEvent("CustomEvent");
e.initCustomEvent("myEvent",true,false,"hello world!");
div.dispatchEvent(e);
}
這個例子中創建了一個冒泡事件“myEvent”。而event.detail的值被設置成了一個簡單的字符串,然后在div和document上偵聽該事件,因為在initCustomEvent中設置了事件冒泡。所以當div激發該事件時,瀏覽器會將該事件冒泡到document。
IE中的事件模擬(IE8及之前版本中):
與DOM中事件模擬的思路類似,先創建event對象,再為其指定相應信息,然后再使用該對象來觸發事件。當然IE在實現以下每個步驟都不太一樣。
例如:
var btn = document.getElementById("myBtn");
//創建事件對象,不接受任何參數,結果會返回一個通用的event對象,你必須為該event對象指定所有必要的信息。
var event = document.createEventObject();
//初始化事件對象
event.screenX = 100;
event.screenY = 0;
event.clientX = 0;
event.clientY =0;
event.ctrlKey = false;
event.altKey = false;
event.shiftKey = false;
event.button = 0;
//觸發事件
btn.fireEvent("onclick",event);