當事件發生時,會動態產生一個 event 物件,事件操控器可以由此物件讀取事件的資訊。
設定用戶事件組(UIEvent, UIEvents)之事件的初值,此事件必須先用 createEvent() 產生。在發動(dispatch)事件前,要先設定事件的初值。其語法是:
事件.initUIEvent(型態, 上傳旗, 取消旗, view, detail)
- 型態:物件型態名稱。用戶事件組有以下型態:DOMFocusIn, DOMFocusOut, DOMActivate, focus, blur。
- 上傳旗:設為 true,則事件可以向上傳遞。
- 取消旗:設為 true,則事件可以取消。
- view:指定抽象視區。可設為 window。
- detail:設定滑鼠按鍵次數。
- 程式用法:
<script type='text/javascript'>
function initUIEventDM()
{
var eo=document.getElementById("iuevt");
if( window.outerWidth == undefined )
{
eo.fireEvent("onfocus");
}
else
{
var vo = document.createEvent("UIEvent");
vo.initUIEvent("focus", true, true, window, 1 );
eo.dispatchEvent( vo );
}
}
</script>
<a href='javascript:initUIEventDM()'>
點此模擬右邊元素 onfocus</a> / / / /
<input id='iuevt' onfocus=
'alert( event.view +" / "+ event.detail )' size=16> - 執行結果:
點此模擬右邊元素 onfocus / / / /
- 上例中,IE 用 fireEvent();Firefox, Safari, Chrome 用 dispatchEvent()。
如果事件是可取消的,就取消事件預設的工作。事件會向上傳遞。其語法是:
事件.preventDefault()
- 程式用法:
<script type='text/javascript'>
function preventDefaultDM(e)
{
if( e.preventDefault == undefined )
e.returnValue = false;
else
{
if( e.cancelable )
e.preventDefault();
}
alert( e.screenX +' / '+ e.screenY );
}
</script>
滑鼠點此格 <input type='checkbox'
onclick='preventDefaultDM(event)'
style='color:red' size=16 /> - 執行結果:
滑鼠點此格
- 上例中,IE 用 returnValue;Firefox, Safari, Chrome 用 preventDefault()。小方格預設的打勾動作會被取消。
事件停止向上傳遞。其語法是:
事件.stopPropagation()
- 程式用法:
<script type='text/javascript'>
function stopPropagationDM(e)
{
if( e.stopPropagation == undefined )
e.cancelBubble = true;
else
e.stopPropagation();
alert( '不上傳' );
}
function propagationDM(e)
{
alert( '上傳' );
}
</script>
<div onclick='alert("DIV")'
style='width:50%; height:80px; background:#777777'>
滑鼠點此格不會上傳 <input type='checkbox'
onclick='stopPropagationDM(event)'
style='color:red' size=16 /><br />
滑鼠點此格會上傳 <input type='checkbox'
onclick='propagationDM(event)'
style='color:red' size=16 /><br />
</div> - 執行結果:滑鼠點此格不會上傳
滑鼠點此格會上傳
- 上例中,IE 用 cancelBubble;Firefox, Safari, Chrome 用 stopPropagation()。