谁能解释一下为什么numpad keyup和keydown事件返回不同的键值?
考虑一下这个:
<input type="text" />
<script>
document.getElement('input').addEvents({
'keydown':function(e){
console.log('keydown: code:' + e.code + ', key:' + e.key);
},
'keyup':function(e){
console.log('keyup : code:' + e.code + ', key:' + e.key + '\n');
}
});
</script>
我本来以为每个事件都会为键降和键增返回相同的键值,但相反,我得到了下面的输出(在按0,1,2,8和9之后):
按键:代码:96,按键:0<br>按键:代码:96,按键`
keydown:代码:97,密钥:1
keyup:代码:97,密钥:a
向下键:代码:98,键:2
向上键:代码:98,键:b
按键:代码:104,按键:8
按键:代码:104,按键:h
向下键:代码:105,键:9
向上键:代码:105,键:i
通常我会使用按键,因此,从来没有任何问题。当在键盘上按下相应的数字小键盘键(向下突出显示,向上取消突出显示)时,我在屏幕上突出显示数字小键盘代表按钮时遇到了这种情况。
有什么想法吗?
在侦听按键和键控事件时使用 e.code 而不是 e.key。e.key仅在按键事件中可靠。
请参见:
不同的浏览器如何实现键下、按键和键控事件存在很大的混乱,甚至键降和键控事件中的 keyCode 值也尚未跨浏览器标准化。
当前,事件对象有三个属性,其中包含有关按键的信息:
按下的键的值存储在keyCode或charCode属性中,但不会同时存储在这两个属性中,keyCode始终在keydown和keyup事件中设置,charCode在keypress事件中设置。
因此,例如,如果您按“e”:
如果你在numpad中按9号:
Mootools试图通过添加event.code和event.key属性来标准化事物:
event.code = event.which || event.keyCode;
event.key = String.fromCharCode(code).toLowerCase();
它还转换数字小键盘上数字的键代码,但仅适用于键控事件(版本 1.4.5 ),而不适用于键控。我不知道这是有意还是无意的,但是可以通过替换mootools-core-1.4.5-全无相容中的行1163来
轻松修改键控事件以具有相同的行为.js:
if (type == 'keydown') {
自:
if (type == 'keydown' || type == 'keyup') {
这样,keyup事件中的keyCodes也将被转换。
有趣的是,Mozilla 开发者网络说:
charCode ',' keyCode '和' which '已被弃用,您应该使用' char '或' key '来代替,如果可用的话。
但是我还没有在火狐或Chrome中看到这种实现。jQuery为事件对象添加了“键”属性,但它总是“未定义”(可能取决于浏览器的实现)。
我发现了很多相关的问题(这里和其他地方),但没有具体找到这个问题。 我正在尝试侦听箭头键(37-40)的键关闭事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“keydown”事件。 示例:http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html 在该页面上,单击“在此处键入 - 但是,如果我做同样的事情,但
我一直试图为pyplay开发一个“文本框”类,作为一个小小的个人项目,我遇到了一个真正难倒我的问题。我试图扩展在这里找到的pyplay文本输入类,把它包装在一个支持多行和滚动功能的文本框类中。 当我试图在文本行之间上下移动闪光灯时,问题就来了。基本上,一旦按下“向上”箭头,就会将闪光灯一直移动到顶部,然后它就不再响应向下移动。 下面是我如何给类事件的代码: 下面是文本框类的代码(来自上述代码):
在我们开始学习键盘的相关内容之前,请注意,在现代设备上,还有其他“输入内容”的方法。例如,人们使用语音识别(尤其是在移动端设备上)或用鼠标复制/粘贴。 因此,如果我们想要跟踪 <input> 字段中的所有输入,那么键盘事件是不够的。无论如何,还需要一个名为 input 的事件来跟踪 <input> 字段中的更改。对于这样的任务来说,这可能是一个更好的选择。稍后我们将在 事件:change,inpu
遇到了 keyup 和 keydown 区别的问题,于是自己简单在控制台输出了一个小写字母 a。 这是 keydown 的输出打印。 这是 keypress 的打印。 为什么这两个事件对象返回字母 a 的 keyCode 编码竟然不一致?
我是新来的PHP,一直在使用社区和答案在这里,真正帮助我的一个小项目,我正在工作,所以提前感谢大家的帮助到目前为止! 我正在提取保存在格式不良的文本文件/提要中的大量信息,修剪特殊字符的内容,然后使用查找其他特定字符串,并用逗号(,)或分号(;)替换它们,以创建一段可用的文本。然后我想在这个文本中搜索特定的关键字,并返回文本的其他部分。 到目前为止,我已经成功地将文本分解成多维数组,但我现在还不知
嗨,我写了一个mapreduce作业,它一般解析XML文件。我能够解析XML文件并正确生成所有键值对。我有6个不同的键和相应的值。所以我并行运行6个不同的减速器。 现在我面临的问题是,reducer将两个不同的键 - 值对放在同一个文件中,其余4个键值放在单个文件中。因此,简而言之,在化简器输出的6个文件中,我得到了4个具有单键值对的文件和1个具有两个键值对的文件以及1个没有任何内容的文件。 我尝