如何检查KeyboardEvent.关键字在Javascript中的特定范围
How to check KeyboardEvent.key in specific range in Javascript
在Javascript中,我有keydown事件的回调函数。我使用keyCode
和which
属性来检测用户按了哪些键。
var keyPressed = event.keyCode || event.which;
if (keyPressed > 47 && keyPressed < 58) {
//do something
}
效果很好。然而,这个属性被弃用了,我切换到key
属性。当我替换代码时,它不能正常工作。
if (event.key > 47 && event.key < 58) {
//do something
}
对于可打印字符,.key()
返回一个非空Unicode字符串,其中包含键的可打印表示形式。
本质上:对于ASCII字符,您将获得字符本身而不是其ASCII码。
对于数字,你可以这样写:
var myInput = document.getElementsByTagName('input')[0];
myInput.addEventListener("keydown", function(event) {
if(event.key >= "0" && event.key <= "9") {
console.log('digit: ' + event.key);
}
});
<input>
对于字母,您还必须检查.key()
是否返回单个字符,因为不可打印的密钥(如delete
)将被编码为"Delete"
,这将通过测试"Delete" >= "A" && "Delete" <= "Z"
。
var myInput = document.getElementsByTagName('input')[0];
myInput.addEventListener("keydown", function(event) {
if(event.key.length == 1 && event.key >= "A" && event.key <= "Z") {
console.log('capital letter: ' + event.key);
}
});
<input>
根据https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
" KeyboardEvent。键只读属性返回用户按下的一个或多个键的值。"
返回的值是字符串。你可能需要继续使用key。检查范围的代码
或者,您可以使用switch语句,如mdn
中的示例所示。switch (event.key) {
case "ArrowDown":
// Do something for "down arrow" key press.
break;
case "ArrowUp":
// Do something for "up arrow" key press.
break;
case "ArrowLeft":
// Do something for "left arrow" key press.
break;
case "ArrowRight":
// Do something for "right arrow" key press.
break;
case "Enter":
// Do something for "enter" or "return" key press.
break;
case "Escape":
// Do something for "esc" key press.
break;
default:
return; // Quit when this doesn't handle the key event.
}
或者事件仍然生成像
这样的数组 var validKeys = ["ArrowDown", "ArrowUp", ...]
,然后检查是否事件。键在数组中
最后你可以使用正则表达式
应该可以
<script type="text/javascript">
document.addEventListener('keydown', function(event){
var charTyped = event.key;
if (/^[a-z'd]$/i.test(charTyped)) {
console.log("Letter or number typed: " + charTyped);
}
})
</script>
仅用于字母(包括大写字母)的正则表达式代码如下
/^[a-z'D]
- 'd -当你想包含数字时使用
- 'D -不包括数字
window.addEventListener('keydown', e => {
const letterTyped = e.key;
if (/^[a-z'D]$/i.test(letterTyped)) {
console.log("Letter pressed: " + letterTyped);
}
});
相关文章:
- 获取给定JavaScript范围内的解析函数
- 生成时间戳日期|Javascript范围内的空数据
- 注入函数中的 JavaScript 范围
- 可能存在Javascript范围问题
- JavaScript范围说明
- 如何获取整个 JavaScript 范围内上次单击的事件数据
- 下面的 JavaScript 范围是如何工作的
- 关于 JavaScript 范围的澄清
- JavaScript 范围和执行上下文
- Javascript 范围和此关键字的使用
- 变量和框架的 JavaScript 范围
- 使用此标识符的函数的 JavaScript 范围规则
- Javascript 范围:为什么 foo 返回未定义
- Javascript - 范围问题 - 有很好的Javascript答案
- JavaScript 范围和全局变量
- Javascript范围在角度SPA应用程序中不起作用
- KineticJS - 基本的JavaScript范围问题
- 我的JavaScript范围有什么问题
- 尝试块中的 JavaScript 范围
- JavaScript 范围/代码迭代不同步