Skip to content

JavaScript 事件是什麼?常見事件類型一覽

什麼是事件:JavaScript 常見事件類型

事件表示一個在 DOM 物件上所發生的事件。事件的產生可以是使用者在網頁上觸發很多不同的事件,或是來自 API 因處理非同步任務所產生。而最常見的就是滑鼠事件,當然還有其他的鍵盤、下載、表單、調整大小...,而負責處理事件的程式通常被稱為 事件處理器(Event Handler)

一段事件處理由三個角色組成,看清楚這三個就不會亂:

角色在程式碼中的位置說明
監聽的對象document.querySelector('#Btn')事件掛在哪個 DOM 上
事件類型'click'發生什麼事才要理它
事件處理器後面那個函式事件發生時要做什麼
js
document.querySelector('#Btn').addEventListener('click', () => {
  console.log('被點了');
});

實際動手寫請往下看 就來寫個事件處理,綁定方式的演進則整理在 DOM 事件級別

常見 Event 事件

滑鼠事件

事件名稱說明
click滑鼠點擊到 DOM。點擊的定義為在同一個 DOM 完成一組 mousedownmouseup 的動作。
dblclick滑鼠兩次點擊並放開時。
mouseenter滑鼠進入 DOM 的範圍中。只會觸發一次,在 DOM 內部移動並不會引起觸發。
mouseleave滑鼠離開 DOM 的範圍。
mouseover滑鼠移入時。(支援冒泡)
mouseout滑鼠移出時。(支援冒泡)

小提醒

mouseovermouseout 支援 冒泡,滑過子元素時會再次觸發;不希望重複觸發,請改用 mouseentermouseleave

鍵盤事件

事件名稱說明
keydown按下鍵盤按鍵時。
keypress按下並放開鍵盤按鍵後。(只對能產生文字符號的按鍵有效,已不建議使用)
keyup放開鍵盤按鍵時。

判斷按了哪個鍵,請用 事件物件event.key,實際範例可看 一些常用的小技巧

表單事件

事件名稱說明
change當表單的值完成變更時觸發,或是輸入文字而失去焦點時觸發。
input修改值後每次觸發。此事件的特點就是會連續觸發,例如:在用戶輸入文字的同時,也一起搜尋該文內容的相關資訊。
focus取得焦點時。
blur失去焦點時。
submit表單送出時。

注意

submit 事件的預設行為會讓頁面重新載入,通常要在事件處理器中呼叫 event.preventDefault() 把它取消掉。

介面事件

事件名稱說明
scroll捲軸移動時觸發。
resize視窗或容器大小改變時。
load資源載入完成後。
error資源載入錯誤時。
beforeunload關閉網頁之前。
unload關閉網頁之後。

效能小提醒

scrollresizemousemove 這幾個屬於高頻事件,短時間內可以觸發上百次。處理函式請盡量輕量,必要時搭配 定時器 做節流(throttle)或去彈跳(debounce)。

常見問題

什麼是事件處理器(Event Handler)?

事件處理器是事件發生時被呼叫的那個函式。透過 addEventListener() 把它掛在某個 DOM 上,之後每次該事件觸發,函式 就會被執行一次。

mouseenter 與 mouseover 有什麼差別?

mouseover 支援冒泡,滑過子元素時會再次觸發;mouseenter 不會冒泡,滑鼠進入範圍只觸發一次,在內部移動不再觸發。想避免重複觸發時選 mouseenter

change 與 input 該用哪一個?

要邊打字邊反應用 input,它每次值變動都會觸發;只需要使用者輸入完成或選單選定後才處理,用 change 較省事,也不會頻繁執行。

keypress 為什麼不建議再使用?

keypress 已被標記為過時,且只對能產生文字符號的按鍵有效,功能鍵不會觸發。改用 keydownkeyup,並以 event.key 判斷按下哪個鍵。

scroll、resize 這類事件會不會影響效能?

會。它們在短時間內可觸發上百次,處理函式若又去讀寫版面就容易掉幀。常見做法是節流或去彈跳,把實際執行的次數壓下來。

延伸閱讀