事件屬性和方法
主要注意在IE與DOM名稱的差異上。| IE名稱 | DOM名稱 | 類型 | 讀/寫 | 說明 |
|---|---|---|---|---|
| altKey | altKey | Boolean | R/W | 按下Alt鍵則為true |
| butoon | butoon | Integer | R/W | 滑鼠事件,值對應按下的滑鼠鍵(對照下一張表格) |
| cancelBubble | cancelBubble | Boolean | IE:R/W、DOM:R | IE設置為true可取消氣泡事件 |
| N/A | stopPropagation() | Function | N/A | DOM使用此方法來取消氣泡事件 |
| clientX | clientX | Integer | IE:R/W、DOM:R | 滑鼠指標在「用戶端區域」的X座標 |
| clientY | clientY | Integer | IE:R/W、DOM:R | 滑鼠指標在「用戶端區域」的Y座標 |
| ctrlKey | ctrlKey | Boolean | IE:R/W、DOM:R | 按下Ctrl鍵則為true |
| fromElement | relatedTarget | Element | IE:R/W、DOM:R | 滑鼠指標所離開的元素 |
| toElement | currentTarget | Element | IE:R/W、DOM:R | 滑鼠指標正在進入的元素 |
| N/A | charCode | Integer | R | 按下按鍵的Unicode值 |
| keyCode | keyCode | Integer | R/W | IE中keypress事件按下按鍵的Unicode值,keydown/keyup事件為按鍵的數位代號。DOM中keypress時為0,其餘為按下按鍵的數位代號。 |
| N/A | detail | Integer | R | 滑鼠按鍵被按一下的次數 |
| returnValue | N/A | Boolean | R/W | 設置為false時可取消IE事件的預設行為 |
| N/A | preventDefault() | Function | N/A | DOM使用該方法來阻止事件的預設行為 |
| screenX | screenX | Integer | IE:R/W、DOM:R | 滑鼠指標相對於「整個電腦螢幕」的X座標值 |
| screenY | screenY | Integer | IE:R/W、DOM:R | 滑鼠指標相對於「整個電腦螢幕」的Y座標值 |
| shiftKey | shiftKey | Boolean | IE:R/W、DOM:R | 按下Shift鍵則為true |
| srcElement | target | Element | IE:R/W、DOM:R | 引起事件的元素/物件 |
| type | type | String | IE:R/W、DOM:R | 事件的名稱 |
我最常看到也最麻煩是程式碼中只寫 returnValue,也就是說單單只針對IE進行處理,只要使用其他Browser即可閃過些段程式碼。正規有進行相容性處理是returnValue與preventDefault都要進行處理。
範例:使用同一個函數處理多個事件
window.onload=function(){
var objImg = document.getElementByTagName("img")[0];
objImg=handle;
}
funcion handle(evt){
// 相容性處理
if (window.event) evt = window.event;
// 透過type屬性判斷事件名稱,這裡沒有on字首
if (evt.type == "click")
......
else if (evt.type == "mouseover")
......
}
範例:找出觸發事件的物件
function handle(evt){
// 相容性處理
if(window.event) evt = window.event;
var getTarget;
if(evt.srcElement) // 處理相容性,獲取IE事件目標
getTarget = evt.srcElement;
else
getTarget = evt.target; // 獲取DOM事件目標
......
}
button的值
| 數值 | IE | DOM |
|---|---|---|
| 0 | 未按下按鍵 | 左鍵 |
| 1 | 左鍵 | 中鍵(滑輪) |
| 2 | 右鍵 | 右鍵 |
| 3 | 同時按下左右鍵 | 不支援,undefined |
| 4 | 中鍵(滑輪) | 不支援,undefined |
| 5 | 同時按下左中鍵 | 不支援,undefined |
| 6 | 同時按下右中鍵 | 不支援,undefined |
| 7 | 同時按下左中右鍵 | 不支援,undefined |
鍵盤事件
鍵盤事件重要的是「使用者按了什麼鍵?」IE沒有charCode屬性,而keyCode只有在keydown與keyup事件觸發時才會與標準DOM的keyCode相同,在keypress事件中等於charCode。if (window.event) {
evt = window.event;
evt.charCode=(evt.type == "keypress") ? evt.keyCode : 0;
...
}
通常不採用keyCode是因為它表示鍵盤按鍵,而不是輸出字元,例如輸出"a"和"A"時,keyCode的值是相等的,charCode則以字元為區分,另外,在keypress事件中,DOM的keyCode值始終為0。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。