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