Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中按下该键并将其放入数组?_Javascript_Keyboard_Keypress - Fatal编程技术网

如何在JavaScript中按下该键并将其放入数组?

如何在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

如何获取按下的键,并将该键放入数组,而不是返回键代码

例如,用户将按“a”。然后,代码将把“a”——而不是字符的键码——放入数组中


提前谢谢

像这样的东西怎么样

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)
})