由于一次對事件的更精确的觸發控制,才知道了為什麼會需要createEventObject這個方法。原來覺得可以fireEvent,對于控制事件觸發已經非常的友善和強大了,可是一次BT的控制,發現居然還必須自己控制事件參數event的值。我們知道當事件觸發時,正常的window.event對象的衆多屬性基本都是readonly的。而使用fireEvent觸發事件後,event對象的很多屬性都是預設值(或空值),那麼我們怎麼修改它成為我們期望的值呢?這時createEventObject方法就派上用場了。
調用document對象的createEventObject方法,我們會得到一個event的對象執行個體。這個是當然了,不過這個我們建立的event執行個體的屬性大都是可寫的,這樣一來我們就完全可以定制一個具有我們希望屬性參數的event對象。在使用它來作為fireEvent方法的參數,事件觸發後的控制就完完全全的在我們自己的掌握之中了

。看下面這個我整理并簡化後,使用createEventObject方法配合fireEvent的事例:
<div id="divEvent" oncontextmenu="return false;" style="border: dotted 1px blue;
width: 170px; height: 100px; padding: 10px" onmousedown="ShowContextMenu(this)">
</div>
Right click the above rectangle.
<script>
</script>
<script Language="javascript">
<br />
<button onclick="RunEvent()">
Run Event</button>
<button onclick="FireEvent()">
Fire Event</button>
<button onclick="document.location.href=document.location.href">
Refresh</button>
當我們在藍色的區域内點選滑鼠右鍵時,通過調用ShowContextMenu方法,會出現一個context
menu。并且ShowContextMenu的邏輯依賴于event對象的屬性值,當我麼使用"Run
Event"這個按鈕時,由于event對象裡是預設值,ShowContextMenu方法不能正确的執行。使用FireEvent方法,我們通過createEventObject調用,建立一個event對象,并賦與适當的屬性值,我們就可以完全使用代碼模拟出滑鼠或鍵盤所觸發的事件動作。
當然,fireEvent和createEventObject方法都是IE實作的DOM提供的獨家方法
。
本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。