2008年12月25日

window:事件(A-K)

window| 特徵A-M| 特徵N-Z| 方法A-F | 方法G-Z | 事件A-K| 事件L-Z
window 的事件操控器

使用這些事件操控器特徵時,可以用 window.handler;也可以省略 window,直接用 handler。一般的用法是:

window.handler=函式位置

當特定的事件發生時,會執行設定的函式。使用此法,一個事件只能設定一個操控器。可以改用 addEventListener,可以在一個事件加上多個操控器。

在 Firefox, Safari, Chrome 呼用事件操控器函式時,會將 event 物件放在第一個參數;在 IE 不會如此作。下面範例中,用指令 e = e || window.event 確保取得 event 物件。

事件操控器通常也可用在 HTML 元素。

onabort

關閉視窗或按瀏覽器的停止下載,會啟動此事件操控器。在 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>

  • 執行結果:

    設定操控器

onbeforeunload

在 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>

  • 執行結果:

    設定操控器

onblur

當視窗失去聚焦,會啟動此事件操控器。可加在 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>

  • 執行結果:

    設定操控器

onchange

視窗內容變更,會啟動此事件操控器。可加在 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 均執行成功。
onclick

用戶在視窗點擊滑鼠,會啟動此事件操控器。可由 event 物件檢查是哪一鍵被點擊及其座標。

event.button 的值,Firefox, Safari, Chrome 的定義:

  1. 0:左鍵。
  2. 1:中鍵,多已改為滾輪。
  3. 2:右鍵。

event.button 的值,IE 的定義:

  1. 0:沒有按。
  2. 1:左鍵。
  3. 2:右鍵。
  4. 3:兩鍵同時按。
  5. 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>

  • 執行結果:

    設定操控器

onclose

關閉視窗,會啟動此事件操控器。下面的範例測試沒成功。

  • 程式用法:

    <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> 

  • 執行結果:

    設定操控器 // 關閉視窗

oncontextmenu

點擊滑鼠右鍵,會啟動此事件操控器。操控器傳回 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>

  • 執行結果:

    設定操控器

ondblclick

用戶在視窗雙點擊滑鼠,會啟動此事件操控器。在 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>

  • 執行結果:

    設定操控器

ondragdrop

用滑鼠由其它程式拖曳檔案,文件;放置此視窗,會啟動此事件操控器。要用 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 測試成功。
onerror

當執行發生錯誤時,會跳到此特徵設定的操控器。操控器回傳 true,可以防止執行系統預設的操控器。操控器的參數:

  1. 錯誤訊息字串。
  2. 發生錯誤處的 URI 字串。
  3. 錯誤碼。

在 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, 執行成功。
onfocus

當視窗獲得焦點,會啟動此事件操控器。可加在 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>

  • 執行結果:

    設定操控器

onkeydown

鍵盤的鍵被壓下,會啟動此事件操控器。可加在 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>

  • 執行結果:

    設定操控器

onkeypress

鍵盤的鍵被壓著不放,會啟動此事件操控器。可加在 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>

  • 執行結果:

    設定操控器

onkeyup

鍵盤的鍵壓下後放開,會啟動此事件操控器。可加在 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>

  • 執行結果:

    設定操控器


©2008-2009 by ant2legs, All Rights Reserved. ant2legs 擁有其製作的文章,圖片與程式的著作權,所有權利保留。