从 JavaScript 中的 KeyCode 中获取字符值...然后修剪

这就是我现在拥有的:

$("input").bind("keydown",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
}

如果 可能不是 ASCII 字符(、 、 、 等)...我现在需要以某种方式(最好是编程方式 - 而不是查找表)的这些值。e.keyCodeAltbackspacedelarrowstrimvalue

我正在使用jQuery。

我必须使用这个事件。 不会为我需要捕获的某些键(、、、等)激活。keydownkeyPressEscdelbackspace

我无法用于获取输入的值。 太慢了。setTimeoutsetTimeout(function(){},0)


答案 1

根据我的经验是不可靠的。 期望 unicode 字符代码作为参数; 返回 javascript 键代码。Javascript键码和Unicode字符码不是一回事!特别是,数字键盘键返回与普通数字键不同的键(因为它们是不同的键),而对于两者和字母返回相同的键(您在两种情况下都按了相同的键),尽管它们具有不同。String.fromCharCode(e.keyCode)String.fromCharCodee.keyCodekeycodekeycodeupperlowercasecharcodes

例如,普通数字键 1 生成一个包含 49 的事件,而数字键盘键 1(带 on)生成 97。与我们一起使用,我们得到以下结果:keycodeNumlockkeycodeString.fromCharCode

String.fromCharCode(49) returns "1"
String.fromCharCode(97) returns "a"

String.fromCharCode需要 unicode 字符代码,而不是 javascript 键代码。键生成一个 a 为 65 的事件,与它将生成的字符的大小写无关(在事件中是否按下键等,还有一个修饰符)。字符的 unicode 为 61,而字符的 unicode 为 41(例如,根据 http://www.utf8-chartable.de/)。但是,这些是值,转换为十进制后,“A”的值为65,“a”为97。[1] 这与我们从这些值中获得的一致。akeycodeShiftacharcodeAcharcodehexcharcodeString.fromCharCode

我自己的要求仅限于处理数字和普通字母(根据字符串中的位置接受或拒绝),并让控制字符(-键,-某物)通过。因此,我可以检查控件字符,如果它不是控制字符,我会根据范围进行检查,然后我才需要获取实际字符。鉴于我不担心大小写(无论如何我都会将所有字母更改为大写字母),并且已经限制了键码的范围,我只需要担心数字键盘键。以下就足够了:FCtrl

String.fromCharCode((96 <= key && key <= 105)? key-48 : key)

更一般地说,一个从a可靠地返回字符的函数会很棒(也许作为一个jQuery插件),但我现在没有时间写它。不好意思。charcode

我还要提到(如果您使用的是jQuery),它规范化和,这样您就不必担心按下了哪种键。将其与仍然存在的问题仍然存在。e.whiche.keyCodee.charCodeString.fromCharCode

[1] 我有一段时间感到困惑 -.所有文档都说 期望一个 unicode ,而在实践中它似乎适用于ASCII字符代码,但我认为这是由于需要从十六进制转换为十进制,再加上ASCII字符代码和Unicode十进制字符代码重叠用于普通拉丁字母的事实。String.fromCharCodecharcode


答案 2

也许我没有正确理解这个问题,但是如果你想捕获两个输入,你能不能不使用?keyup

$("input").bind("keyup",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
});