onabort | onbeforeunload | onblur | onchange |
onclick | onclose | oncontextmenu | ondblclick |
ondragdrop | onerror | onfocus | onkeydown |
onkeypress | onkeyup |
使用這些事件操控器特徵時,可以用 window.handler;也可以省略 window,直接用 handler。一般的用法是:
window.handler=函式位置
當特定的事件發生時,會執行設定的函式。使用此法,一個事件只能設定一個操控器。可以改用 addEventListener,可以在一個事件加上多個操控器。
在 Firefox, Safari, Chrome 呼用事件操控器函式時,會將 event 物件放在第一個參數;在 IE 不會如此作。下面範例中,用指令 e = e || window.event 確保取得 event 物件。
事件操控器通常也可用在 HTML 元素。
關閉視窗或按瀏覽器的停止下載,會啟動此事件操控器。在 IE,onabort 只能用在圖像 <img> 元素;當圖檔很大,而用戶按瀏覽器的停止鈕時,會啟動此事件。下例沒測試成功。
- 程式用法:
<script type='text/javascript'>
function onabortHd()
{
//var e = e || window.event;
onabortSet(null);
alert('棄船 ');
}
function onabortSet(hd)
{
window.onabort=hd;
}
</script>
<a href='javascript:onabortSet(onabortHd)'>設定操控器</a> - 執行結果:
在 unload 事件之前,啟動此事件操控器。下例中,先點選設定操控器,再點瀏覽器的重載(reload),就會啟動事件。
- 程式用法:
<script type='text/javascript'>
function onbeforeunloadHd(e)
{
var e = e || window.event;
onbeforeunloadSet(null);
alert('停止下載 '+e);
}
function onbeforeunloadSet(hd)
{
window.onbeforeunload=hd;
}
</script>
<a href='javascript:onbeforeunloadSet(onbeforeunloadHd)'>設定操控器</a> - 執行結果:
當視窗失去聚焦,會啟動此事件操控器。可加在 HTML 元素上使用,請參考 onblur。下例中,先點選設定操控器,再將焦點移到其它程式上。
- 程式用法:
<script type='text/javascript'>
function onblurHd(e)
{
var e = e || window.event;
onblurSet( null );
alert('要去哪? '+e);
}
function onblurSet(hd)
{
window.onblur=hd;
}
</script>
<a href='javascript:onblurSet(onblurHd)'>設定操控器</a> - 執行結果:
視窗內容變更,會啟動此事件操控器。可加在 HTML 元素上使用。
- 程式用法:
<script type='text/javascript'>
function onchangeHd(e)
{
var e = e || window.event;
onchangeSet( null );
alert('已變更 '+e);
}
function onchangeSet(hd)
{
window.onchange=hd;
}
</script>
<a href='javascript:onchangeSet(onchangeHd)'>設定操控器</a> //
<input size=24> - 執行結果:
設定操控器 //
- 上例中,先點選設定操控器;接著在文字行輸入幾個文字;然後將焦點移到別處;這時會啟動事件。
- IE 無此項;Firefox, Safari, Chrome 均執行成功。
用戶在視窗點擊滑鼠,會啟動此事件操控器。可由 event 物件檢查是哪一鍵被點擊及其座標。
event.button 的值,Firefox, Safari, Chrome 的定義:
- 0:左鍵。
- 1:中鍵,多已改為滾輪。
- 2:右鍵。
event.button 的值,IE 的定義:
- 0:沒有按。
- 1:左鍵。
- 2:右鍵。
- 3:兩鍵同時按。
- 4:中鍵。
event.screenX, event.screenY 放滑鼠點擊座標,以螢幕之左上角為原點 (0,0)。
event.clientX, event.clientY 放滑鼠點擊座標,以瀏覽器的展現區之左上角為原點。可以將瀏覽器變小,就可以看出與上面的差異。
在 Firefox, Safari, Chrome 可以用 window.onclick;在 IE 必須使用 document.body.onclick。
在 Firefox 用 window.onclick 時,點擊滑鼠任一鍵,都會呼用操控器。其它情形,只有點擊滑鼠左鍵會產生 onclick 事件。
可加在 HTML 元素上使用,請參考 onclick。
- 程式用法:
<script type='text/javascript'>
function onclickHd(e)
{
var e = e || window.event;
onclickSet(null);
alert('滑鼠'+ e.button +' / '+
e.clientX +','+ e.clientY +' / '+
e.screenX +','+ e.screenY);
}
function onclickSet(hd)
{
if( window.outerWidth == undefined )
document.body.onclick=hd;
else
window.onclick=hd;
}
</script>
<a href='javascript:onclickSet(onclickHd)'>設定操控器</a> - 執行結果:
關閉視窗,會啟動此事件操控器。下面的範例測試沒成功。
- 程式用法:
<script type='text/javascript'>
function oncloseHd()
{
//var e = e || window.event;
oncloseSet(null);
alert('關閉' );
}
function oncloseSet(hd)
{
window.onclose=hd;
}
</script>
<a href='javascript:oncloseSet(oncloseHd)'>設定操控器</a> //
<a href='javascript:window.close()'>關閉視窗</a> - 執行結果:
點擊滑鼠右鍵,會啟動此事件操控器。操控器傳回 false,可以取消預設的選單。Firefox 使用 window.oncontextmenu;IE, Safari, Chrome 使用 document.body.oncontextmenu。
- 程式用法:
<script type='text/javascript'>
function oncontextmenuHd(e)
{
var e = e || window.event;
oncontextmenuSet(null);
alert('滑鼠'+ e.button +' / '+
e.clientX +','+ e.clientY +' / '+
e.screenX +','+ e.screenY);
return false;
}
function oncontextmenuSet(hd)
{
if(window.fullScreen == undefined)
document.body.oncontextmenu=hd;
else
window.oncontextmenu=hd;
}
</script>
<a href='javascript:oncontextmenuSet(oncontextmenuHd)'>設定操控器</a> - 執行結果:
用戶在視窗雙點擊滑鼠,會啟動此事件操控器。在 Firefox, Safari, Chrome 可以用 window.ondblclick;在 IE 必須使用 document.body.ondblclick。
在 Firefox 用 window.ondblclick 時,點擊滑鼠任一鍵,都會呼用操控器。其它情形,只有點擊滑鼠左鍵會產生 ondblclick 事件。
可加在 HTML 元素上使用,請參考 ondblclick。
- 程式用法:
<script type='text/javascript'>
function ondblclickHd(e)
{
var e = e || window.event;
ondblclickSet(null);
alert('滑鼠'+ e.button +' / '+
e.clientX +','+ e.clientY +' / '+
e.screenX +','+ e.screenY);
return false;
}
function ondblclickSet(hd)
{
if( window.outerWidth == undefined )
document.body.ondblclick=hd;
else
window.ondblclick=hd;
}
</script>
<a href='javascript:ondblclickSet(ondblclickHd)'>設定操控器</a> - 執行結果:
用滑鼠由其它程式拖曳檔案,文件;放置此視窗,會啟動此事件操控器。要用 addEventListener設定事件操控器。
- 程式用法:
<script type='text/javascript'>
function ondragdropHd(e)
{
var e = e || window.event;
alert('拖放 : ' +e);
e.cancelBubble = true;
if(e.stopPropagation) e.stopPropagation();
}
function ondragdropSet(hd)
{
if(window.addEventListener)
window.addEventListener("dragdrop", hd, false);
else
window.attachEvent("ondrop", hd);
}
function ondragdropClear(hd)
{
if(window.removeEventListener)
window.removeEventListener("dragdrop", hd, false);
else
window.detachEvent("ondrop", hd);
}
</script>
<a href='javascript:ondragdropSet(ondragdropHd)'>設定操控器</a> //
<a href='javascript:ondragdropClear(ondragdropHd)'>清除操控器</a> - 執行結果:
- 上例只在 Firefox 測試成功。
當執行發生錯誤時,會跳到此特徵設定的操控器。操控器回傳 true,可以防止執行系統預設的操控器。操控器的參數:
- 錯誤訊息字串。
- 發生錯誤處的 URI 字串。
- 錯誤碼。
在 HTML 元素上使用 onerror 卻無法宣告參數時,可用 arguments[0] 至 arguments[2] 取得參數值。
可以使用 try catch 處理執行的錯誤。系統執行的錯誤會產生 Error 物件。
- 程式用法:
<script type='text/javascript'>
function onerrorHd(m, l, c)
{
alert(m +' : '+ c +' : : '+ l);
window.onerror=null;
};
function mistake()
{
//var a=new Array(9999999999);
var a=ABC;
}
function onerrorSet(hd)
{
window.onerror=hd;
}
</script>
<a href='javascript:onerrorSet(onerrorHd)'>設定操控器</a> //
<a href='javascript:mistake()'>產生錯誤</a> - 執行結果:
- Safari, Chrome 失敗;IE, Firefox, 執行成功。
當視窗獲得焦點,會啟動此事件操控器。可加在 HTML 元素上使用,請參考 onfocus。 下例中,先點選設定操控器,然後將焦點移到其它程式,再移回來。
- 程式用法:
<script type='text/javascript'>
function onfocusHd(e)
{
var e = e || window.event;
window.onfocus=null;
alert('回來啦! '+e);
}
function onfocusSet(hd)
{
window.onfocus=hd;
}
</script>
<a href='javascript:onfocusSet(onfocusHd)'>設定操控器</a> - 執行結果:
鍵盤的鍵被壓下,會啟動此事件操控器。可加在 HTML 元素上使用,請參考 onkeydown。IE 必須使用 document.body.onkeydown。
- 程式用法:
<script type='text/javascript'>
function onkeydownHd(e)
{
var e = e || window.event;
onkeydownSet(null);
alert('鍵盤 : '+ e.altKey
+' : '+ e.ctrlKey
+' : '+ e.shiftKey
+' : '+ e.keyCode);
}
function onkeydownSet(hd)
{
if( window.outerWidth == undefined )
document.body.onkeydown=hd;
else
window.onkeydown=hd;
}
</script>
<a href='javascript:onkeydownSet(onkeydownHd)'>設定操控器</a> - 執行結果:
鍵盤的鍵被壓著不放,會啟動此事件操控器。可加在 HTML 元素上使用,請參考 onkeypress。IE 必須使用 document.body.onkeypress。onkeypress 很像 onkeydown,但兩者傳回來的 keyCode 不同;對 shift, alt, ctrl 鍵的反應也不同。
- 程式用法:
<script type='text/javascript'>
function onkeypressHd(e)
{
var e = e || window.event;
onkeypressSet(null);
alert('鍵盤 : '+ e.altKey
+' : '+ e.ctrlKey
+' : '+ e.shiftKey
+' : '+ e.keyCode);
}
function onkeypressSet(hd)
{
if( window.outerWidth == undefined )
document.body.onkeypress=hd;
else
window.onkeypress=hd;
}
</script>
<a href='javascript:onkeypressSet(onkeypressHd)'>設定操控器</a> - 執行結果:
鍵盤的鍵壓下後放開,會啟動此事件操控器。可加在 HTML 元素上使用,請參考 onkeyup。IE 必須使用 document.body.onkeyup。
- 程式用法:
<script type='text/javascript'>
function onkeyupHd(e)
{
var e = e || window.event;
onkeyupSet(null);
alert('鍵盤 : '+ e.altKey
+' : '+ e.ctrlKey
+' : '+ e.shiftKey
+' : '+ e.keyCode);
}
function onkeyupSet(hd)
{
if( window.outerWidth == undefined )
document.body.onkeyup=hd;
else
window.onkeyup=hd;
}
</script>
<a href='javascript:onkeyupSet(onkeyupHd)'>設定操控器</a> - 執行結果: