Skip to content

原生 JavaScript 事件屬性清單

tags: JavaScript DOM Event

基本概述

  • 事件物件:當事件(如 clickkeydown 等)觸發時,瀏覽器會生成一個 Event 物件,並傳遞給事件監聽器(Event Listener)
  • 繼承結構:所有事件物件都繼承自 Event 類,不同類型的事件(如 MouseEventKeyboardEvent)會擴展額外的屬性

常見屬性(Event 基礎屬性)

屬性名稱類型描述
typestring事件的名稱(如 "click""keydown"
targetEventTarget觸發事件的目標元素(DOM 節點)
currentTargetEventTarget當前處理事件的元素(事件監聽器綁定的元素,可能與 target 不同)
bubblesboolean指示事件是否會冒泡(bubble)到父元素
cancelableboolean指示事件是否可以被取消(透過 preventDefault()
defaultPreventedboolean指示是否已調用 preventDefault() 取消預設行為
eventPhasenumber事件傳播的階段(0: 未傳播, 1: 捕獲, 2: 目標, 3: 冒泡)
timeStampnumber事件創建的時間戳(毫秒,從頁面加載開始計算)
isTrustedboolean指示事件是否由用戶觸發(true),還是程式碼模擬(false

範例

javascript
document.addEventListener('click', (event) => {
  console.log(event.type);          // "click"
  console.log(event.target);        // 點擊的元素
  console.log(event.currentTarget); // 綁定監聽器的元素
  console.log(event.bubbles);       // true
});

特定事件類型的擴展屬性

1. 滑鼠事件(MouseEvent

繼承自 Event,用於 clickmousedownmousemove 等事件

屬性名稱類型描述
clientXnumber滑鼠相對於視窗(viewport)的 X 座標
clientYnumber滑鼠相對於視窗的 Y 座標
screenXnumber滑鼠相對於螢幕的 X 座標
screenYnumber滑鼠相對於螢幕的 Y 座標
pageXnumber滑鼠相對於 document (考慮滾動)的 X 座標
pageYnumber滑鼠相對於 document 的 Y 座標
offsetXnumber滑鼠相對於目標元素的 X 座標
offsetYnumber滑鼠相對於目標元素的 Y 座標
buttonnumber按下的滑鼠按鈕(0: 左鍵, 1: 中鍵, 2: 右鍵)
buttonsnumber表示哪些按鈕被按下(位元掩碼:1: 左鍵, 2: 右鍵, 4: 中鍵)
altKeyboolean是否按下 Alt 鍵
ctrlKeyboolean是否按下 Ctrl 鍵
shiftKeyboolean是否按下 Shift 鍵
metaKeyboolean是否按下 Meta 鍵(Windows 鍵或 Command 鍵)
javascript
document.addEventListener('click', (event) => {
  console.log(event.clientX, event.clientY); // 滑鼠位置
  console.log(event.button);                 // 按下的按鈕
});

2. 鍵盤事件(KeyboardEvent

用於 keydownkeyupkeypress 等事件

屬性名稱類型描述
keystring按下的按鍵的值(如 "Enter"、"a")
codestring按鍵的物理位置代碼(如 "KeyA"、"Enter")
altKeyboolean是否按下 Alt 鍵
ctrlKeyboolean是否按下 Ctrl 鍵
shiftKeyboolean是否按下 Shift 鍵
metaKeyboolean是否按下 Meta 鍵
repeatboolean指示按鍵是否被重複按下(長按)
keyCodenumber已棄用,按鍵的數值代碼(不推薦使用,建議用 key 或 code)
javascript
document.addEventListener('keydown', (event) => {
  console.log(event.key);   // "Enter"
  console.log(event.code);  // "Enter"
  console.log(event.ctrlKey); // true 或 false
});

3. 表單事件(InputEventEvent

用於 inputchangesubmit 等事件

屬性名稱類型描述
datastringInputEvent 特有,輸入的新資料(僅適用於 input 事件)
inputTypestringInputEvent 特有,輸入的類型(如 "insertText""deleteContent"
javascript
document.querySelector('input').addEventListener('input', (event) => {
  console.log(event.data);      // 新輸入的字符
  console.log(event.inputType); // "insertText"
});

4. 觸控事件(TouchEvent

用於觸控設備的 touchstarttouchmove 等事件

屬性名稱類型描述
touchesTouchList當前螢幕上的觸控點列表
targetTouchesTouchList當前目標元素上的觸控點列表
changedTouchesTouchList觸發本次事件的觸控點列表
javascript
document.addEventListener('touchstart', (event) => {
  console.log(event.touches.length); // 觸控點數量
});

需注意

  1. 棄用屬性
    • keyCodecharCodewhich 已棄用,建議使用 keycode
  2. 瀏覽器兼容性
    • 大多數屬性在現代瀏覽器中廣泛支援,但某些屬性(如觸控相關)可能僅限行動裝置。
  3. 事件類型擴展
    • 不同事件類型(如 WheelEvent、FocusEvent)有額外專屬屬性,可查閱 MDN Event 參考

總結

  • 基礎屬性typetargetcurrentTarget 等適用於所有事件。
  • 擴展屬性:根據事件類型(如 MouseEventKeyboardEvent)提供特定資訊。
  • 使用方式:通過事件監聽器訪問,例如 event.target