如何在JavaScript中按下该键并将其放入数组?
如何获取按下的键,并将该键放入数组,而不是返回键代码 例如,用户将按“a”。然后,代码将把“a”——而不是字符的键码——放入数组中如何在JavaScript中按下该键并将其放入数组?,javascript,keyboard,keypress,Javascript,Keyboard,Keypress,如何获取按下的键,并将该键放入数组,而不是返回键代码 例如,用户将按“a”。然后,代码将把“a”——而不是字符的键码——放入数组中 提前谢谢 像这样的东西怎么样 var your_array = []; document.onkeydown = function (e) { var keyPress; if (typeof event !== 'undefined') { keyPress = event.keyCode; } else if (e) { ke
提前谢谢 像这样的东西怎么样
var your_array = [];
document.onkeydown = function (e) {
var keyPress;
if (typeof event !== 'undefined') {
keyPress = event.keyCode;
}
else if (e) {
keyPress = e.which;
}
your_array.push(String.fromCharCode(keyPress));
return false; // Prevents the default action
};
更新:如果您需要准确的字符信息(例如,区分大小写等),请务必查看下面的注释和。Daniel的答案非常完美,但如果您想要获得实际字符(而不是数字代码),您可以使用此功能:
String.fromCharCode(code);
有关更多信息,请参阅事件处理程序中的。(假设e
是事件对象):
注意
fromCharCode
如何返回给定Unicode字符代码的字符。还请注意我是如何使用charCode
而不是keyCode
的,因为它在返回字符代码时更为正确,这有时与keyCode不同(您需要字符)。为此需要keypress
事件keydown
和keydup
不能可靠地用于获取字符信息。有关JavaScript关键事件的详细说明,请参见
我编写了一个名为的库,用于将键盘事件转换为键和字符
var yourKeyArray = []
node.addEventListener("keydown", function(event) {
var key = keysight(event).key // ignores shift keys, so 'A' is given as 'a'
// var char = keysight(event).char // only characters, and differentiates between 'A' and 'a'
yourKeyArray.push(key)
})
我还打算建议
charCode
,但有些浏览器不支持它:这是一个困难的情况。一方面,对于兼容浏览器,keycode始终是keycode,charcode始终是Unicode值。在不兼容的浏览器上,charcode不存在,根据事件类型,keycode在keycode或Unicode值之间变化。当然,我们需要Unicode值,但在兼容浏览器上,这在keycode中是看不到的。根据正在编写的网站的上下文和访问者统计,我想是时候继续并忽略这些明显不兼容的浏览器了。哪个事件的事件处理程序charCode
仅存在于keypress
事件中。对于IE而言,keyCode
事件中的keyCode
是字符代码,对于不可打印的键,IE中不会出现keypress事件,因此可以相当可靠地获取字符代码。查看我的答案。您需要使用keypress
事件来键入字符,而不是keydown
事件。@Tim:根据我的说法,keydown
事件似乎最可靠。主要区别在于,当使用keydown
事件时,对于小写和大写字母,您将收到相同的keyCode
(因为您按的是相同的键)。这是否可以接受,取决于OP正在构建什么。我还遗漏了什么吗?请尊重PPK,这个特殊的quirksmode表并没有像它那样有用。quirksmode中标题为“keyCode和charCode”的段落确实包含了关键点:keydown
和keydup
事件根本不包含字符信息。你在这方面取得的任何成功似乎都是巧合和不可靠的。如果您担心Opera缺少对charCode
的支持,幸运的是Opera支持which
属性,因为它在所有非IE浏览器中工作,比charCode
更有用,并且不在quirksmode中。@Tim:有趣的地方。但是,如果我们不关心角色信息,只需要按键代码(例如,在实现浏览器游戏的输入时),您在我的示例中看到任何问题了吗?如果您不关心角色信息,则使用keydown
,没有问题,但是在这种情况下,keyCode
在所有浏览器中都能正常工作,因此不需要查看任何其他属性。OP明确表示他/她对字符信息感兴趣。为什么要使用key属性?尝试以下操作:document.onkeydown=函数(e){alert(e.key);};不需要将键码转换为字符。
var charsTyped = [];
document.onkeypress = function(evt) {
evt = evt || window.event;
// Ensure we only handle printable keys
var charCode = typeof evt.which == "number" ? evt.which : evt.keyCode;
if (charCode) {
charsTyped.push(String.fromCharCode(charCode));
}
};
var yourKeyArray = []
node.addEventListener("keydown", function(event) {
var key = keysight(event).key // ignores shift keys, so 'A' is given as 'a'
// var char = keysight(event).char // only characters, and differentiates between 'A' and 'a'
yourKeyArray.push(key)
})