學習Enterprise Library
事件是使用者在訪問頁面時執行的操作。當瀏覽器探測到一個事件時,比如滑鼠單擊或按鍵,它可以觸發與這個事件相關聯的JavaScript物件,這些物件稱為事件處理程式(event handler)。事件處理程式名稱全是小寫的,以下是一些常用事件的小結:
窗體事件
onload 事件 :當頁面完成載入時觸發
一般用法
window.onload=functionName;
在觸發一個事件時可以這麼做,但是促發多個事件時不能這樣寫。以下是很多人都會犯的錯誤:
window.onload=function1;
window.onload=function2;
window.onload=function3;
這樣寫程式碼是不對的,第二次設定會覆蓋第一次的,這時只有function3會被執行。如果要連續執行兩次以上的函式,應該這樣寫:
window.onload=function (){
firstfunction();
secondFunction();
}
不過,另一種載入的方式將更好,無論你在頁面載入時要執行多少個函式。外國的一個人寫的,確實好用。
function
addLoadEvent(func) {
var
oldonload = window.onload;
if
window.onload = function () {
if (oldonload) {
oldonload();
}
newFunction();
}
}
else {
window.onload = newFunction;
}
}
1. var oldonload = window.onload;
2. if (typeof oldonload == 'function' ) 檢查 oldonload 的變數型別。如果已經設定了 window.onload, 那麼它應該是一個函式呼叫(否則,就是空的)。
3.
window.onload = function
() {
if
(oldonload) {
oldonload();
}
newFunction();
}
這些程式碼重新設定
window.onload
的值來完成兩種操作:它之前所做的操作以及引數中傳遞的新函式,
window.onload
事件處理程式設定為一個匿名函式。如果函式有值,就執行
window.onload
原本應該完成的操作。但是在函式完成之前,還要執行
newFunction();
4. window.onload = newFunction; 如果 oldonload 不是函式,也就是說它是未定義的。所以,就執行新函式。
onunload 事件: 當用戶離開頁面(關閉或跳轉)時觸發
這個事件一般不要去用,反正我很反感。但是有一種可用情況,當你需要清除頁面快取時可以這樣用:(FireFox等瀏覽器會把瀏覽過的頁面儲存起來) window.onunload=function (){}
onresize 事件: 當調整網頁大小時重新繪製動態內容(重新載入頁面),現在用的很少。
onmove 事件: 視窗移動時觸發
onabort 事件: 當用戶取消網頁上的影象載入時,會觸發onabort事件。這種事件不太常用,也並非所有瀏覽器都支援。
onerror 事件: 當頁面發生javascript錯誤時觸發,一般在設計Web時要設定onerror=null,避免將錯誤資訊顯示給使用者。
onfocus 事件: 頁面成為最前面的活動窗體時觸發。可以用來控制窗體堆放。
onblur 事件: 如果希望一個視窗總是出現在所有其他視窗前面時可以使用。程式碼可以這樣寫:
window.onblur = moveUp;
function
moveUp() {
self.focus();
}
滑鼠事件
onmousedown事件:點選滑鼠時觸發
onmouseup 事件:釋放滑鼠是觸發
onmousemove事件:移動滑鼠時觸發
onmouseover 事件:當滑鼠移進入任何註冊了onmouseover事件處理程式區域時觸發
ondbclick 事件:雙擊任何註冊了onmouseover事件處理程式區域時觸發
onclick 事件:單擊
滑鼠事件例項
< html xmlns ="http://www.w3.org/1999/xhtml">
< head runat ="server">
< title ></ title >
< script type ="text/javascript" language ="javascript">
function handle(oEvent) {
var oDiv = document.getElementById("display" );
if (window.event)
oEvent = window.event;
oDiv.innerHTML += oEvent.type + "<br/>" ;
}
window.onload = function () {
var oImg = document.getElementsByTagName("img" )[0];
oImg.onmousedown = handle;
oImg.onmouseup = handle;
oImg.onmouseover = handle;
oImg.onmouseout = handle;
oImg.onclick = handle;
oImg.ondblclick = handle;
}
</ script >
</ head >
< body >
< div >
< img src ="images/2.jpg" border ="0" />
< div id ="display"></ div >
</ div >
</ body >
</ html >
表單事件處理
onsubmit 事件:提交表單時觸發
onreset 事件:重置
onchange 事件:當用戶修改表單欄位時觸發。這可以用來立即驗證輸入資訊。
onselect 事件:如果使用者選擇了一個input或textarea表單區域中的文字,就會觸發。
onclick 事件:表單中同樣常用
onblur 事件:應用於input text時,當用戶在改變欄位之後離開時,會觸發onblur和onchange事件。
onfocus 事件:焦點事件
鍵盤事件
onkeydown 事件:按下鍵時觸發
onkeyup :釋放鍵時觸發
onkeypress 事件:當用戶按下一個鍵並釋放時觸發。
對於鍵盤事件而言,最重要的並不是事件的名稱,而是所按的鍵是什麼。由於IE 瀏覽器沒有charCode 屬性,而keyCode 只有在keydown 、keyup 事件發生時才與標準的DOM 的keyCode 相同,在keypress 事件中等同於charCode, 因此常採用如下方法:
oEvent.charCode=(oEvent.type=="keypress" )?oEvent.keyCode:0;
之所以通常不採用keyCode 是因為它表示鍵盤按鍵,而不是輸出字元,因此輸出“a ”和“A ”時,keyCode 值是相等的,charCode 則以字元為區分。另外在keypress 事件中,標準Dom 的keyCode 值始終為0 ,如下例:
< html xmlns ="http://www.w3.org/1999/xhtml">
< head runat ="server">
< title ></ title >
< script type ="text/javascript" language ="javascript">
function handle(oEvent) {
var oDiv = document.getElementById("display" );
if (window.event) {
oEvent = window.event;
oEvent.charCode=(oEvent.type=="keypress" )?oEvent.keyCode:0;
}
oDiv.innerHTML += oEvent.type + ":charCode:" + oEvent.charCode + " keyCode:" + oEvent.keyCode + "<br/>" ;
}
window.onload = function () {
var oTextArea = document.getElementsByTagName("textarea" )[0];
oTextArea.onkeypress = handle;
oTextArea.onkeydown = handle;
}
</ script >
</ head >
< body >
< div >
< textarea rows ="4" cols ="50"></ textarea >
< div id ="display"></ div >
</ div >
</ body >
</ html >