JavaScript基礎-常用的鍵盤事件

一、前言

在網頁開發中,用戶交互 是非常重要的一環。除了鼠標操作之外,鍵盤事件也是前端開發中最常見的交互方式之一。

JavaScript 提供了多個用于監聽和處理鍵盤輸入的事件,例如 keydownkeyupkeypress。掌握這些事件可以幫助我們實現更豐富的用戶交互體驗,比如:

  • 監聽用戶按下回車鍵提交表單;
  • 實現快捷鍵功能(如 Ctrl + S 保存);
  • 輸入框限制只能輸入數字或字母;
  • 游戲中的鍵盤控制邏輯;

本文將詳細介紹 JavaScript 中常用的鍵盤事件,并結合實際案例幫助你快速上手!

二、JavaScript 中的鍵盤事件類型

事件類型觸發時機是否支持字符鍵
keydown按下任意鍵時觸發? 支持所有按鍵
keyup松開按鍵時觸發? 支持所有按鍵
keypress(已棄用)按下字符鍵并產生字符輸入時觸發? 不支持功能鍵(如 Shift、Ctrl 等)

📌 注意:keypress 事件在現代瀏覽器中已被 棄用(deprecated),建議統一使用 keydownkeyup

三、事件對象(Event Object)

當鍵盤事件被觸發時,會傳入一個 事件對象(event),它包含了與該次按鍵相關的詳細信息,常用的屬性如下:

屬性名含義
key返回按下的鍵值(字符串),如?'a',?'Enter',?'Shift'
keyCode(已棄用)返回按鍵的 ASCII 編碼(整數)
code返回物理按鍵的標識符(如?'KeyA',?'Enter'
ctrlKey?/?shiftKey?/?altKey判斷是否同時按下了 Ctrl/Shift/Alt 鍵

四、常用鍵盤事件示例

? 示例1:監聽 Enter 鍵提交表單

<input type="text" id="searchInput" placeholder="輸入內容后按回車搜索"><script>
document.getElementById("searchInput").addEventListener("keydown", function(event) {if (event.key === "Enter") {alert("你按下了回車鍵,正在搜索:" + event.target.value);}
});
</script>

📌 應用場景:常用于搜索框、登錄框等自動提交場景。

? 示例2:監聽 Ctrl + S 快捷鍵保存內容

document.addEventListener("keydown", function(event) {if (event.ctrlKey && event.key === "s") {event.preventDefault(); // 阻止默認保存行為(如彈出保存頁面)alert("你按下了 Ctrl + S,正在保存數據...");}
});

📌 技巧說明:

  • 使用?event.ctrlKey?判斷是否按住 Ctrl;
  • 使用?event.preventDefault()?可阻止瀏覽器默認行為。

? 示例3:限制輸入框只允許輸入數字

<input type="text" id="numberInput" placeholder="請輸入數字"><script>
document.getElementById("numberInput").addEventListener("keydown", function(event) {const allowedKeys = ['Backspace', 'Tab', 'ArrowLeft', 'ArrowRight', 'Delete'];// 允許刪除鍵、方向鍵、Tab 等基礎操作if (allowedKeys.includes(event.key)) return;// 判斷是否為數字鍵if (!/^[0-9]$/.test(event.key)) {event.preventDefault();}
});
</script>

📌 這個方法可以有效防止用戶輸入非法字符,提升用戶體驗。

? 示例4:實現方向鍵控制游戲角色移動

document.addEventListener("keydown", function(event) {switch(event.key) {case "ArrowUp":console.log("向上移動");break;case "ArrowDown":console.log("向下移動");break;case "ArrowLeft":console.log("向左移動");break;case "ArrowRight":console.log("向右移動");break;}
});

📌 應用場景:適用于小游戲、畫布動畫、地圖導航等功能。

五、常見問題與注意事項

問題解答
如何區分大小寫?event.key?會根據是否按住 Shift 返回大寫或小寫
如何判斷組合鍵?使用?event.ctrlKeyevent.shiftKeyevent.altKey
keyCode?和?key?的區別?keyCode?是數字編碼,不推薦使用;key?是可讀性更強的字符串
如何阻止默認行為?使用?event.preventDefault()
keypress?被棄用了怎么辦?統一使用?keydown?或?keyup?替代

六、總結對比表

事件類型適用場景是否推薦使用
keydown檢測按鍵按下、組合鍵、方向鍵? 推薦
keyup按鍵釋放后執行操作? 推薦
keypress字符輸入檢測? 已棄用
input?事件實時獲取輸入內容變化? 配合使用

七、結語

感謝您的閱讀!如果你有任何問題或想法,請在評論區留言交流!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85314.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85314.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決 Android 項目下載依賴缺失導致的問題

解決 Android 項目下載依賴缺失導致的問題 在項目根目錄下的 build.gradle 文件中增加下面的代碼&#xff1a; buildscript {repositories {...maven {url "https://maven.aliyun.com/repository/jcenter"}maven {url "https://maven.aliyun.com/repository/c…

Clang Code Model: Error: The clangbackend executable “D:\Soft\Qt5.12.12\Tool

Qt Creator->菜單->幫助->關于插件->C>去掉ClangCodeModel勾選->重啟Qt Creator 參考&#xff1a;【問題解決】Qt Creator 報錯&#xff1a;Clang Code Model: Error: The clangbackend executable_qt clang code model-CSDN博客

高頻面試之12 HBase

12 HBase 文章目錄 12 HBase12.1 HBase存儲結構12.2 HBase的寫流程12.3 HBase的讀流程12.6 HBase的合并12.7 RowKey設計原則12.8 RowKey如何設計12.9 HBase二級索引原理 12.1 HBase存儲結構 架構角色&#xff1a; 1&#xff09;Master 實現類為HMaster&#xff0c;負責監控集群…

Vue3 + TypeScript + Element Plus 表格實例null檢查方法

代碼分析&#xff1a; // 表格實例對象 const tableRef ref<ElTableExtendedInstance | null>(null); // 表格列配置列表 const columnConfigs ref<IColumnConfig[]>([{ prop: "index", label: "序號", width: 60 },{ prop: "batchNo&…

Neo4j常見語法-unwind

unwind的用法&#xff08;UNWIND 是一個強大的操作符&#xff0c;用于將集合&#xff08;列表、數組&#xff09;展開為多行數據。它類似于關系型數據庫中的 UNNEST 或 LATERAL JOIN&#xff0c;是 Cypher 查詢中處理集合數據的核心工具&#xff09; &#xff08;1&#xff09;…

JavaEE-Spring-IoCDI

Spring是?個開源框架, 他讓我們的開發更加簡單. 他?持?泛的應?場 景, 有著活躍?龐?的社區, 這也是Spring能夠?久不衰的原因. 但是這個概念相對來說, 還是?較抽象. ??句更具體的話來概括Spring, 那就是: Spring 是包含了眾多?具?法的 IoC 容器 容器是?來容納…

CppCon 2017 學習:10 Core Guidelines You Need to Start Using Now

C.45: 不要定義一個僅僅初始化成員變量的默認構造函數&#xff0c;而是使用類內成員初始化器 如果你有一個默認構造函數&#xff0c;它的唯一作用是給成員變量賦默認值&#xff08;如 1、2、3&#xff09;&#xff0c;這更清晰、簡單的方法是直接在成員變量聲明時使用類內初始…

Java并發編程實戰 Day 28:虛擬線程與Project Loom

【Java并發編程實戰 Day 28】虛擬線程與Project Loom 文章內容 在“Java并發編程實戰”系列的第28天&#xff0c;我們將聚焦于**虛擬線程&#xff08;Virtual Threads&#xff09;**和 Project Loom&#xff0c;這是 Java 在高并發場景下的一次重大革新。隨著現代應用對性能和…

Linux系統移植⑦:uboot啟動流程詳解-board_init_r執行過程

Linux系統移植⑦&#xff1a;uboot啟動流程詳解-board_init_r執行過程 在uboot中&#xff0c;board_init_r 是啟動流程中的一個關鍵函數&#xff0c;負責完成板級&#xff08;board-specific&#xff09;的后期初始化工作。以下是關于該函數的詳細說明&#xff1a; 1. 函數作…

OpenStack入門體驗

1.1云計算概述 相信大家都聽到很多的阿里云、騰訊云、百度云等等這些詞,那到底什么是云計算?云 計算又能做什么? 1.1.1什么是云計算 云計算(cloud computing)是一種基于網絡的超級計算模式,基于用戶的不同需求,提供所需的資源,包括計算資源、存儲資源、網絡資源等。云計算…

RK 安卓10/11平臺 HDMI-IN 調試

這篇文章我們介紹一下在安卓9、10、11的版本上&#xff0c;rk平臺的hdmi-in功能是如何實現的&#xff0c;下篇文章我們再介紹安卓12之后的版本有了什么變化。希望對在rk平臺調試hdmi-in功能的朋友有一些幫助。 目錄 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;…

MongoDB學習記錄(快速入門)

MongoDB核心 基礎概念 數據庫 數據庫是按照數據結構來組織、存儲和管理數據的倉庫。在內存中運行的&#xff0c;一旦程序運行結束或者計算機斷電&#xff0c;程序運行中的數據都會丟失。我們需要將一些程序運行的數據持久化到硬盤之中&#xff0c;以確保數據的安全性。數據庫…

阿里一面:微服務拆分需要考慮什么因素?

要拆分微服務&#xff0c;首先我們要了解微服務拆了會有什么問題&#xff1f;怎么合理拆服務&#xff1f; 拆分服務會帶來什么問題&#xff1f; 舉個電商系統下單扣庫存的例子。 對于單體應用&#xff0c;通訊在進程內部進行&#xff0c;下單方法調用扣庫存方法&#xff0c;…

3D高斯潑濺和4D高斯

1.高斯函數 想象你往平靜的湖水里扔一塊石頭&#xff0c;水波會以石頭落點為中心向外擴散&#xff0c;形成一個逐漸衰減的圓形波紋。高斯函數的形狀就和這個波紋類似&#xff1a; 中心最高&#xff08;石頭落點&#xff0c;波峰最強&#xff09;。越往外&#xff0c;高度&…

comfyui插件和comfyui mac安裝

mac comfyui安裝包 ComfyUI.zip&#xff0c;官方最新0.3.40&#xff0c;如果后續官方有迭代&#xff0c;可以直接通過git更新源碼升級 comfyui插件下載&#xff0c;解壓放到custom_nodes目錄下&#xff0c;包含 comfyui-animatediff-evolved&#xff08;視頻插件&#xff09; 和…

面試題SpringCloud

SpringCloud有哪些特征&#xff1f; 分布式/版本化配置服務注冊與發現路由服務到服務的調用負載均衡斷路器領導選舉和集群狀態分布式消息傳遞 SpringCloud核心組件&#xff1f; Eureka 注冊中心Ribbon 客戶端負載均衡Hystrix&#xff1a; 服務容錯處理Feign:聲明式Rest客戶端Zu…

ASR-PRO語音識別可能出現的問題

ASR-PRO語音識別可能出現的問題 4月份有一天刷到牢大/愛麗絲語音自開關燈設備&#xff0c;心血來潮&#xff0c;博主也是淺嘗了一下&#xff0c;由此也總結一下&#xff0c;實現此項目會出現的問題。 在實現愛麗絲開關燈模塊時ASRPRO語音識別可能出現的問題如下&#xff1a; …

蒼穹外賣--緩存菜品Spring Cache

Spring Cache是一個框架&#xff0c;實現了基于注解的緩存功能&#xff0c;只需要簡單地加一個注解&#xff0c;就能實現緩存功能。 Spring Cache提供了一層抽象&#xff0c;底層可以切換不同的緩存實現&#xff0c;例如&#xff1a; ①EHCache ②Caffeine ③Redis 常用注解…

個人簡歷制作MarkDown模板

MarkDown制作個人簡歷的模板放在了github上&#xff0c;大家如有需求&#xff0c;請自取&#xff1a; https://github.com/QQQQQQBY/ResumeTemplate 介紹一下此模板的特點&#xff1a; &#x1f338;個人面試期間使用的、整理的簡歷格式&#xff0c;現在分享給大家。 ?簡歷采…

【MySQL數據庫 | 第五篇】DDL操作2

文章目錄 當前數據庫student的數據數據表操作 - 修改&刪除&#x1f4d6;修改操作增加字段&#x1f44f;案例&#xff1a;向數據表student中添加字段 id修改字段的數據類型【只能修改字段的屬性】&#x1f44f;案例&#xff1a;將student表中字段age的屬性由tinyint unsigne…