事件處理概述
事件處理是物件化程式設計的一個很重要的環節,沒有了事件處理,程式就會變得很死,缺乏彈性。事件處理的過程可以這樣表示:發生事件 - 啟動事件處理程序 - 事件處理程序做出反應。其中,要讓事件處理程序能夠啟動,必須先告訴對象,如果發生了什麼事情,要啟動什麼處理程序,否則這個流程就不能進行下去。事件的處理程序可以是任意 JavaScript 語句,但是我們一般會用特定的自訂函數(function)來處理事情。
指定事件處理程序有三種方法:
方法一 直接在 HTML 標籤中指定。這種方法是用得最普遍的。方法是:
讓我們來看看範例:
這樣的定義標記,能讓文檔讀取完畢的時候彈出一個對話框,寫著“網頁讀取完成,請慢慢欣賞”;在用戶退出文檔(或者關閉窗口,或到另一個頁面去)的時候彈出「再見」。
方法二 編寫特定物件特定事件的 JavaScript。這種方法用得比較少,但是在某些場合還是很好用的。方法為:
方法三在JavaScript 中說明。方法:
. = ;
用這種方法要注意的是,「事件處理程序」是真正的程式碼,而不是字串形式的程式碼。如果事件處理程序是自訂函數,如無使用參數的需要,就不要加「()」。
function ignoreError() {
return true;
}
window.onerror = ignoreError; // 沒有使用「()」
這個例子將 ignoreError() 函數定義為 window 物件的 onerror 事件的處理程序。它的效果是忽略該 window 物件下任何錯誤(由引用不允許存取的 location 物件產生的「沒有權限」錯誤是不能忽略的)。
事件詳解
onblur 事件 發生在視窗失去焦點的時候。應用於:window 物件
onchange 事件 發生在文字輸入區的內容被更改,然後焦點從文字輸入區移走之後。捕捉此事件主要用於即時偵測輸入的有效性,或立刻改變文件內容。應用於:Password 物件;Select 物件;Text 物件;Textarea 物件
onclick 事件 發生在物件被點擊的時候。點選是指滑鼠停留在物件上,按下滑鼠鍵,沒有移動滑鼠而放開滑鼠鍵這一個完整的過程。一個普通按鈕物件(Button)通常會有 onclick 事件處理程序,因為這種物件根本無法從使用者那裡得到任何訊息,沒有 onclick 事件處理程序就等於廢柴。按鈕上新增onclick 事件處理程序,可以模擬“另一個提交按鈕”,方法是:在事件處理程序中更改表單的action, target, encoding, method 等一個或幾個屬性,然後呼叫表單的submit() 方法。在 Link 物件的 onclick 事件處理程序中傳回 false 值(return false),能阻止瀏覽器開啟此連線。即,如果有一個這樣的連結:http://www.a.com" false">Go!,那麼無論使用者怎樣點選,都不會去 www.a.com 網站,除非使用者禁止瀏覽器執行JavaScript。應用於:Button 物件;Checkbox 物件;Image 物件;Link 物件;Radio 物件;Reset 物件;Submit 物件
onerror 事件 發生在錯誤發生的時候。它的事件處理程序通常就叫做「錯誤處理程序」(Error Handler),用來處理錯誤。上邊已經介紹過,要忽略一切錯誤,就使用:
function ignoreError() {
return true;
}
window.onerror = ignoreError;
應用於:window 物件
onfocus 事件的時候發生在焦點
應用於:window 物件
onload 事件 發生在文件全部下載完畢的時候。全部下載完畢意味著不但 HTML 文件,而且包含的圖片,插件,控件,小程式等全部內容都下載完畢。本事件是 window 的事件,但是在 HTML 中指定事件處理程序的時候,我們是把它寫在
標籤中的。應用於:window 物件
事件 發生在使用者把滑鼠放在物件上按下滑鼠鍵的時候。參考 事件。應用於:Button 物件;Link 物件
事件 發生在滑鼠離開物件的時候。參考 事件。應用於:Link 物件
事件 發生在滑鼠進入物件範圍的時候。這個事件和 事件,再加上圖片的預讀,就可以做到當滑鼠移到圖像連接上,圖像更改的效果了。有時我們看到,在指向一個連線時,狀態列上不顯示地址,而顯示其它的資料,看起來這些資料是可以隨時更改的。它們是這樣做出來的:
seover="window.status=Click Me Please!; return true;" onmouseout="window.status=; return true;">
應用於:Link 物件
事件發生在使用者把滑鼠放在物件上滑鼠鍵被按下的情況下,放開滑鼠鍵的時候。如果按下滑鼠鍵的時候,滑鼠並不在放開滑鼠的物件上,則本事件不會發生。應用於:Button 物件;Link 物件
onreset 事件 發生在表單的「重置」按鈕被點選(按下並放開)的時候。透過在事件處理程序中傳回 false 值(return false)可以阻止表單重設。應用於:Form 物件
onresize 事件 發生在視窗被調整大小的時候。應用於:window 物件
onsubmit 事件 發生在表單的「提交」按鈕被點選(按下並放開)的時候。可以使用該事件來驗證表單的有效性。透過在事件處理程序中傳回 false 值(return false)可以阻止表單提交。應用於:Form 物件
onunload 事件 發生在使用者退出文件(或關閉窗口,或到另一個頁面去)的時候。與 onload 一樣,要寫在 HTML 中就寫到標籤裡。 有的 Web Masters 用這個方法來彈出“調查表單”,以“強迫”來者填寫;有的就彈出廣告窗口,唆使來者點擊連接。我覺得這種「onunload="open..."」的方法很不好,有時甚至會因為彈出太多視窗而導致資源缺乏。有什麼對來者說就該在網頁上說完,不對嗎? 應用於:window 物件
🎜