如何区分';输入';和';返回';Javascript中的键?
一些桌面应用程序对“回车”键和numpad的“回车”键的处理方式有所不同。我注意到这两个键在Javascript(jQuery)中生成相同的键代码(13)如何区分';输入';和';返回';Javascript中的键?,javascript,keycode,Javascript,Keycode,一些桌面应用程序对“回车”键和numpad的“回车”键的处理方式有所不同。我注意到这两个键在Javascript(jQuery)中生成相同的键代码(13) 它们在浏览器环境中是否转换为相等,或者是否可以区分它们(即,使CR在文本区域中生成新行,并按“回车”键提交表单?参见Jan Wolters的论文 Enter和Numpad-Enter都给出相同的键码,即13,因为浏览器不区分这两个键。老实说,大多数环境也不区分。使用Windows API可以区分它们(例如),但这确实需要额外的努力。然而,这超
它们在浏览器环境中是否转换为相等,或者是否可以区分它们(即,使CR在文本区域中生成新行,并按“回车”键提交表单?参见Jan Wolters的论文
Enter
和Numpad-Enter
都给出相同的键码,即13,因为浏览器不区分这两个键。老实说,大多数环境也不区分。使用Windows API可以区分它们(例如),但这确实需要额外的努力。然而,这超出了浏览器的抽象范围
更新
正如比尔·索恩(Bill Thorne)所说的那样,KeyboardEvent
对象现在具有位置
属性
从:
可能的值为:
DOM\u KEY\u LOCATION\u标准
0
该键具有
只有一个版本,或者无法区分左右
键的版本,并且未按数字键盘或
被认为是小键盘一部分的按键
DOM\u KEY\u LOCATION\u LEFT
1
该键是该键的左手版本;
例如,在标准101上按下了左侧控制键
键US键盘。此值仅用于具有超过
键盘上的一个可能位置
DOM\u KEY\u LOCATION\u RIGHT
2
密钥是密钥的右侧版本;例如,右侧
在标准101键美国键盘上按下控制键。此值
仅用于在上具有多个可能位置的键
键盘
DOM\u KEY\u LOCATION\u NUMPAD
3
钥匙在数字键盘上
键盘,或具有与数字键对应的虚拟键代码
键盘
注意:当NumLock被锁定时,Gecko总是返回
数字键盘上键的DOM\u KEY\u LOCATION\u NUMPAD。否则,
当NumLock解锁且键盘实际有一个数字
小键盘上,壁虎总是返回DOM\u KEY\u LOCATION\u NUMPAD。另一方面
手,如果键盘没有键盘,比如笔记本电脑上的键盘
在计算机上,只有当NumLock被锁定时,某些键才会变成Numpad。当
此类键触发键事件,位置属性值取决于
密钥。也就是说,它不能是DOM\u key\u LOCATION\u NUMPAD。注意:
NumLock key的key事件指示DOM_key_位置_标准
壁虎和Internet Explorer
如果键盘上有一个键在物理上不同,浏览器应用程序应该和桌面应用程序一样能够区分 随着Chrome(39.0.2171.95 m)、Firefox(32.0.3)、IE(11.0.9600.17501)和Opera(12.17)的最新版本的出现,键盘事件对象现在有了location属性。我想这个属性已经存在了一段时间了,尽管很少有文档记录 onkeydown测试显示,当按下“正常”enter键时,keyCode=13,location=0;当按下numpad enter键时,keyCode=13,location=3 因此,以下代码可用于设置key==13(如果回车),key==176(如果numpad回车):
window.onkeydown=function(ev)
{
var e= ev || window.event,
key = e.keyCode || e.which;
if ((key==13) &&
(e.location===3))
key=176; // 176 is the scancode for the numpad enter
// continued....
}
我提供了一个更新,因为这个问题仍然出现在谷歌搜索结果的顶部附近 根据MDN,和已弃用,不应再使用
KeyboardEvent
键可以根据需要通过访问、和属性来确定
KeyboardEvent.key
通常返回您在文本编辑器中看到的输出键和非输出键的名称(包括区分大小写)
KeyboardEvent.code
返回密钥的字符串描述
KeyboardEvent.location
返回一个介于0和3之间的整数,表示按键所在的键盘区域(分别为标准、左、右和numpad)
在这些属性之间,可以帮助确定哪一个最适合您的给定情况。在这个问题中:event.key
将返回相同的输出(“回车”和“numpad回车”键),而event.code
将返回“回车”
和分别为“NumpadEnter”
在这种情况下,如果要区分numpad键和键盘键,可以使用event.code
。如果希望它们的操作相同,event.key
将是更好的选择
如果要区分其他键,例如左键和右键Ctrl
键,还需要查看event.location
属性
我正在添加一个小键盘事件游乐场,以查看这些事件属性之间的差异。我仅对以下内容进行了轻微修改,这要归功于:
window.addEventListener(“按键按下”),函数(事件){
让str=“key=”+event.key+
“'nbsp code='”+event.code+“'”+
“'nbsp location='”+event.location+“”;
设el=document.createElement(“span”);
el.innerHTML=str+“
”;
document.getElementById(“输出”).appendChild(el);
},对);
#输出{
字体系列:Arial、Helvetica、无衬线字体;
溢出y:自动;
左边距:4em
}
#输出范围{
线高:2米;
}
#输出:第n个子(2n){
颜色:蓝色;
}
按键盘上的键以查看KeyboardEvent的键和代码值。
您可以通过事件的code
属性来区分两者。对于numpad属性,它返回NumpadEnter
,对于另一个属性,它返回NumpadEnter