ASCII 键码转换器

90i*_*ion 0 javascript jquery keycode

是否存在一些JavaScript / jQuery的脚本转换ASCII到keyCodeS按返回keypresskeyupkeydownDOM事件?

我正在考虑类似的事情:

"A".toKeycode
Run Code Online (Sandbox Code Playgroud)

编辑:我在问是否有人制作了一些将所有 ASCII 字符转换为正确键码的脚本。所以" ".toKeycode也应该工作。

小智 5

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

例如,普通数字键 1 生成键码为 49 的事件,而数字键盘键 1(启用 numlock)生成键码 97。与String.fromCharCode我们一起使用我们得到以下结果:

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

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

String.fromCharCode((96 <= key && key <= 105)? key-48 : key) 更一般地说,从字符代码可靠地返回字符的函数会很棒(也许作为 jQuery 插件),但我没有时间现在就写。对不起。

我还会提到 e.which(如果您使用的是 jQuery),它将 e.keyCode 和 e.charCode 标准化,这样您就不必担心按下了哪种键。与它结合的问题String.fromCharCode仍然存在。

1我一时糊涂了-。所有文档都说String.fromCharCode需要一个 unicode 字符代码,而实际上它似乎适用于 ASCII 字符代码,但我认为这是因为需要从十六进制转换为十进制,再加上 ASCII 字符代码和 Unicode 十进制字符代码重叠的事实普通拉丁字母。