Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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_Jquery_Keyboard Events - Fatal编程技术网

Javascript 在键盘事件中获取正确字符

Javascript 在键盘事件中获取正确字符,javascript,jquery,keyboard-events,Javascript,Jquery,Keyboard Events,我正在做一个小文字游戏,我需要得到用户在键盘上输入的最后一个字符。我想出了两种方法 第一种是通过监听文档键盘事件并通过键码获取每个字符。在我开始用键盘上的死键(比如Ā)写chars之前,它工作得非常好。fromCharCode(e.keyCode)将其转换为A,就像keyCode用于A一样,但事件中似乎没有关于事件生成的死键或真实字符的任何内容 第二种方法是保持隐藏的输入始终集中(坏),并在键盘事件上获取输入值的最后一个字符,但这只有在我写得非常慢的情况下才有效。我的代码如下所示: functi

我正在做一个小文字游戏,我需要得到用户在键盘上输入的最后一个字符。我想出了两种方法

第一种是通过监听文档键盘事件并通过键码获取每个字符。在我开始用键盘上的死键(比如Ā)写chars之前,它工作得非常好。fromCharCode(e.keyCode)将其转换为A,就像keyCode用于A一样,但事件中似乎没有关于事件生成的死键或真实字符的任何内容

第二种方法是保持隐藏的输入始终集中(坏),并在键盘事件上获取输入值的最后一个字符,但这只有在我写得非常慢的情况下才有效。我的代码如下所示:

function is_char(e){
  return (!e.ctrlKey && !e.altKey && !e.metaKey &&
                        (e.keyCode >= 65 && e.keyCode <= 90) || 
                        (e.keyCode >= 97 && e.keyCode <= 122)
                );
}
$('#fake_input').on('keyup', function(e){
  if (is_char(e)){
    $('#result').append(this.value[this.value.length - 1]);
  }
}).focus();
这一行造成了“瓶颈”:
This.value[This.value.length-1]
,速度很慢

请尝试以下方法:

更新:

$('#fake_input').keypress(function(e){
    $('#result').append(String.fromCharCode(e.which) + '<br />');
}).focus();
$('#伪输入')。按键(功能(e){
$('#result').append(String.fromCharCode(e.which)+'
'); }).focus();
解释。我假设您希望使用
keypress
而不是
keyup
来捕获字符。请注意,keyup与字符无关。它只告诉您它接收到的键盘信号的键码。使用
按键
,您可以确定大小写,因为您可以获得字符的键码


注意。

这不起作用,因为如果字符是由Alt+0192I输入的,该怎么办我最好删除我正在研究的答案!我也试过用alt键,但我用的是拉脱维亚键盘,它们通常用'or'作为死键,但用keypress和String.fromCharCode仍然不起作用。
App.insert_char = function(c){
    if (c && c.toUpperCase() != c.toLowerCase()){
        console.log(c);
    }
};

if ('oninput' in $('#fake_input')[0]){
    $('#fake_input').on('input', function(e){
        App.insert_char(this.value[this.value.length - 1]);
    });
}
else if ('onpropertychange' in $('#fake_input')[0]){
    $('#fake_input').on('propertychange', function(e){
        App.insert_char(this.value[this.value.length - 1]);
    });
}
else  if ('ontextInput' in $('#fake_input')[0]){
    $('#fake_input').on('textInput', function(e){
        App.insert_char(this.value[this.value.length - 1]);
    });
}
$('#fake_input').keypress(function(e){
    $('#result').append(String.fromCharCode(e.which) + '<br />');
}).focus();