使用javascript获取按键的键值
Get Key Value of Key Pressed with javascriiipt
我找不到打印按键的数值的方法。
window.addEventListener('keydown',e => {
if(e.keyCode >=65 && e.keyCode <=90){
console.log('Yeap letter is pressd');
})
我有一个 运行 条件来仅打印来自 keyPressed 的数值。但是发现 keyCode 已被弃用。我只找到了 e.code
和 e.key
但它们没有按照我的要求工作以打印字母的数值。
我想检查按下的键是否是字母或打印按下的字母的ASCII值
使用string.charCodeAt(0)
获取使用UTF-16编码的原始字符串值中第一个字符的低16位,这是JavaScript内部用来表示内存中字符串的编码方法.
如果UTF-16编码的值小于128,密钥可以用ASCII表示。但是,要获取 ASCII 控制代码值,请使用 ASCII 字母编码的最低有效 4 位。
window.addEventListener('keydown',e => {
let ascii, key = e.key;
if(key.length == 1) {
ascii = key.charCodeAt(0);
if(ascii < 128 && e.ctrlKey) {
ascii = ascii & 0x1f;
}
}
if( typeof ascii == "number" && ascii < 128) {
console.log(`ASCII code ${ascii} entered from keyboard`);
}
else {
console.log( key + " is not in the ASCII character set");
}
});
Type an ASCII letter.
运行 代码片段将分别报告 shift
和 Ctrl
键的按键事件。请注意 ASCII 编码已在很大程度上被 Web 上的 utf-8
编码所取代,因为 ASCII 不适合传输非英语内容,甚至不适合从其他语言借用或引用的短语。
更新以回答更普遍的问题“如何确定键盘事件代码是针对 unicode 字符还是其他字符?”
event.key
要么设置为生成事件的键的 unicode 值,要么设置为键的“命名键属性值”要么产生一个 ASCII 控制字符,如转义键,要么不产生 unicode 值,如功能、箭头、导航和系统键,如“打印屏幕”等。
现在W3C候选推荐中named key attribute values,所有键名都是一串ASCII字符,字符串中有多个字符
Unicode中的前128个代码点用于表示ASCII字符集。
将这些结合在一起意味着如果event.key
字符串的长度大于一个,但字符串中的第一个字符是ASCII字符,那么event.key
一定是一个键属性值:
window.addEventListener('keydown',e => {
const key = e.key;
if(key.length > 1 && key.charCodeAt(0) < 128) {
console.log("Named attribute value: %s", key)
}
else {
console.log("Unicode character '%s'", key);
}
});
Click here to focus and press a key on the keyboard.
请注意,space 栏在 Unicode 中生成 space 字符。在处理命名键属性值时,您可以尝试将其中一些转换为 ASCII 控制代码,但通常最好在代码中使用它们的名称:
if( event.key === "Enter"){... handle enter key...}
if( event.key === "Escape") {... handle escape key...}
要找出一个键的命名键属性值是什么,您可以 运行 一个脚本来通过实验找出或在 W3C 候选推荐中查找它们 as linked above.
我找不到打印按键的数值的方法。
window.addEventListener('keydown',e => {
if(e.keyCode >=65 && e.keyCode <=90){
console.log('Yeap letter is pressd');
})
我有一个 运行 条件来仅打印来自 keyPressed 的数值。但是发现 keyCode 已被弃用。我只找到了 e.code
和 e.key
但它们没有按照我的要求工作以打印字母的数值。
我想检查按下的键是否是字母或打印按下的字母的ASCII值
使用string.charCodeAt(0)
获取使用UTF-16编码的原始字符串值中第一个字符的低16位,这是JavaScript内部用来表示内存中字符串的编码方法.
如果UTF-16编码的值小于128,密钥可以用ASCII表示。但是,要获取 ASCII 控制代码值,请使用 ASCII 字母编码的最低有效 4 位。
window.addEventListener('keydown',e => {
let ascii, key = e.key;
if(key.length == 1) {
ascii = key.charCodeAt(0);
if(ascii < 128 && e.ctrlKey) {
ascii = ascii & 0x1f;
}
}
if( typeof ascii == "number" && ascii < 128) {
console.log(`ASCII code ${ascii} entered from keyboard`);
}
else {
console.log( key + " is not in the ASCII character set");
}
});
Type an ASCII letter.
运行 代码片段将分别报告 shift
和 Ctrl
键的按键事件。请注意 ASCII 编码已在很大程度上被 Web 上的 utf-8
编码所取代,因为 ASCII 不适合传输非英语内容,甚至不适合从其他语言借用或引用的短语。
更新以回答更普遍的问题“如何确定键盘事件代码是针对 unicode 字符还是其他字符?”
event.key
要么设置为生成事件的键的 unicode 值,要么设置为键的“命名键属性值”要么产生一个 ASCII 控制字符,如转义键,要么不产生 unicode 值,如功能、箭头、导航和系统键,如“打印屏幕”等。现在W3C候选推荐中named key attribute values,所有键名都是一串ASCII字符,字符串中有多个字符
Unicode中的前128个代码点用于表示ASCII字符集。
将这些结合在一起意味着如果event.key
字符串的长度大于一个,但字符串中的第一个字符是ASCII字符,那么event.key
一定是一个键属性值:
window.addEventListener('keydown',e => {
const key = e.key;
if(key.length > 1 && key.charCodeAt(0) < 128) {
console.log("Named attribute value: %s", key)
}
else {
console.log("Unicode character '%s'", key);
}
});
Click here to focus and press a key on the keyboard.
请注意,space 栏在 Unicode 中生成 space 字符。在处理命名键属性值时,您可以尝试将其中一些转换为 ASCII 控制代码,但通常最好在代码中使用它们的名称:
if( event.key === "Enter"){... handle enter key...}
if( event.key === "Escape") {... handle escape key...}
要找出一个键的命名键属性值是什么,您可以 运行 一个脚本来通过实验找出或在 W3C 候选推荐中查找它们 as linked above.