在本文中,我們將討論如何在 JavaScript 中捕獲并響應不同的鍵盤事件。我將向您展示幾個現實世界的示例,以使其易于理解。
JavaScript 是網絡的核心技術之一。大多數網站都使用它,并且所有現代網絡瀏覽器都支持它,而不需要插件。在本系列中,我們將討論不同的提示和技巧,它們將幫助您進行日常 JavaScript 開發(fā)。
作為一名 JavaScript 開發(fā)人員,有時您需要實現一些功能,要求您處理鍵盤事件并根據它們執(zhí)行操作。幸運的是,JavaScript 提供了一個內置的 KeyboardEvent 對象,它允許您處理不同類型的鍵盤事件。
JavaScript 中的鍵盤事件
在 JavaScript 中,KeyboardEvent 對象提供了三個事件:按鍵按下、按鍵按下和按鍵彈起。
立即學習“Java免費學習筆記(深入)”;
當您按下鍵盤上的任意鍵時,一系列事件將按以下順序發(fā)生。
- 按下鍵
- 按鍵
- 按鍵
當按下鍵盤上的任意鍵時,會觸發(fā)按鍵事件。并且如果長時間按下某個鍵,則會重復觸發(fā)按鍵按下事件。
按鍵事件主要在按下任何可打印字符時觸發(fā),并在按鍵事件后觸發(fā)。事實上,按鍵事件用于中繼按鍵事件產生的字符。大多數情況下,非字符鍵不會引發(fā)按鍵事件。盡管某些瀏覽器支持此事件,但不建議依賴此事件,因為它將從網絡標準中刪除。
按鍵事件已被棄用,并將在現代瀏覽器中逐步淘汰。
最后,釋放按鍵時會引發(fā)按鍵事件。基本上,按鍵按下和按鍵按下事件的組合為您提供了一個代碼,該代碼指示按下的鍵。
每個鍵盤事件都提供兩個重要的屬性:key 和 code。 key 屬性用按下的字符填充,而 code 屬性用字符的物理鍵位置填充。例如,如果按 a 字符鍵,則 key 屬性將填充為 a,并且 code 屬性將填充為 KeyA 常量。但是,按下的鍵碼不一定與字符相同!如果用戶設置了備用鍵盤布局,例如 Dvorak,則按相同的鍵代碼將產生不同的字符。
以上是 JavaScript 中鍵盤事件的簡要概述。從下一節(jié)開始,我們將討論這些事件以及現實世界的示例,以了解它們是如何工作的。
keydown 事件
在本節(jié)中,我們將了解 keydown 事件如何在 JavaScript 中工作。當按下鍵盤上的任意鍵時,會觸發(fā) keydown 事件。
讓我們快速瀏覽一下以下示例。
document.addEventListener('keydown', (event) => { var keyValue = event.key; var codeValue = event.code; console.log("keyValue: " + keyValue); console.log("codeValue: " + codeValue); }, false);
如您所見,我們創(chuàng)建了一個監(jiān)聽器來監(jiān)聽 keydown 事件。每當按下任何鍵時,都會調用我們的偵聽器,并將該鍵的值和代碼記錄到控制臺。繼續(xù)運行它,看看它是如何工作的。
讓我們看一下以下示例,該示例演示如何檢測用戶是否按下了 ctrl + a 或 ctrl + A。
document.addEventListener('keydown', (event) => { if (event.ctrlKey) { if (event.keyCode == 65 || event.keyCode == 97) { console.log("You have just pressed Ctrl + a/A!"); } } }, false);
首先, ctrlKey 是 KeyboardEvent 對象的一個??特殊屬性,它告訴您在觸發(fā) keydown 事件時是否按下了 Ctrl 鍵。因此,如果 ctrlKey 為 true,則表示按下了 Ctrl 鍵。
接下來,我們檢查按下的字符的 keyCode 值,如果是 65 或 97,則表示是 a 或 A 與 Ctrl 鍵一起按下。 KeyboardEvent 對象的 keyCode 屬性返回按下的鍵的 Unicode 字符代碼。同樣,您還可以使用 KeyboardEvent 對象的 shiftKey 屬性,該屬性告訴您在按下按鍵事件時是否按下了 Shift 鍵。觸發(fā)。
最后,讓我們看一下以下示例,該示例演示如何在 html 表單的輸入字段中僅允許使用字母。
<script> function allowOnlyAlphabets(event) { var charCode = event.keyCode; if ((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123)) return true; else return false; } </script><div> <input type="text" onkeydown="return allowOnlyAlphabets(event);"> </div>
在上面的示例中,我們在輸入文本框上定義了 keydown 事件。因此,當用戶在文本框中輸入任何文本時,它會調用 allowOnlyAlphabets 函數。在 allowOnlyAlphabets 函數中,我們根據字母表的有效 Unicode 范圍驗證了事件對象的 keyCode 屬性的值。因此,如果用戶按下有效的字母字符,則 allowOnlyAlphabets 函數將返回 true,否則將返回 false。最終結果是用戶將無法輸入除字母之外的任何字符。
keyup 事件
在本節(jié)中,我們將了解 keyup 事件如何工作。事實上,它的工作原理與 keydown 事件非常相似,唯一的區(qū)別是它是在釋放按鍵時觸發(fā),而不是在按下按鍵時觸發(fā)。
讓我們看一下下面的例子。
document.addEventListener('keydown', (event) => { var keyValue = event.key; var codeValue = event.code; console.log("keydown event, keyValue: " + keyValue); console.log("keydown event, codeValue: " + codeValue); }, false); document.addEventListener('keyup', (event) => { var keyValue = event.key; var codeValue = event.code; console.log("keyup event, keyValue: " + keyValue); console.log("keyup event, codeValue: " + codeValue); }, false);
在上面的示例中,當您按下任意鍵時,將首先觸發(fā) keydown 事件,然后觸發(fā) keyup 事件。例如,如果您按 a 鍵,您應該在控制臺上看到以下輸出。請務必注意事件的觸發(fā)順序。
keydown event, keyValue: a keydown event, codeValue: KeyA keyup event, keyValue: a keyup event, codeValue: KeyA
讓我們看一下以下示例,它演示了如何在項目中使用 keyup 事件。
<script> function getSearchResults(event, element) { if (element.value.length > 6) { var searchKeyword = element.value; // make an ajax call to fetch search results for "searchKeyword" } } </script><div> <input type="text" onkeyup="return getSearchResults(event, this);"> </div>
在上面的示例中,我們在輸入文本框上定義了 onkeyup 事件。因此,當用戶在文本框中輸入任何文本時,它都會調用 getSearchResults 函數。在 getSearchResults 函數中,我們將進行 AJAX 調用來獲取搜索關鍵字的搜索結果。這也稱為實時搜索,因為它會立即顯示搜索結果,而無需刷新整個頁面。
重要的 KeyboardEvent 對象屬性
在最后一節(jié)中,我將總結 KeyboardEvent 對象的重要屬性。事實上,我們已經在到目前為止討論的示例中看到了一些常用的屬性,例如 key 和 code。我們還將在本節(jié)中討論一些其他重要屬性。
- key:返回按下的字符。例如,如果按下a字符,則會返回 a。
- code:返回字符的物理鍵碼。例如,如果按下a字符,則會返回 KeyA。
- keyCode:返回按下的按鍵的Unicode字符代碼。
- ctrlKey:告訴您觸發(fā)按鍵事件時是否按下Ctrl鍵。
- altKey:告訴您觸發(fā)按鍵事件時是否按下了Alt鍵。
- shiftKey:告訴您觸發(fā)按鍵事件時是否按下Shift鍵。
- metaKey:告訴你觸發(fā)按鍵事件時是否按下了Meta鍵。在大多數情況下,Meta 鍵是鍵盤上位于 Ctrl 和 Alt 鍵之間的鍵。
- 位置:返回鍵盤或設備上按鍵的位置。
如您所見,keyboardEvent 對象提供了各種屬性,允許您檢測不同的按鍵。在大多數情況下,您將使用 keydown 事件來檢測按下的按鍵并執(zhí)行相應的操作。正如我們之前討論的,您不應該使用 keypress 事件,因為它遲早會被棄用。
結論
今天,我們討論了如何在 JavaScript 中使用鍵盤事件以及幾個實際示例。