ASCII到键码转换器

时间:2013-11-27 13:03:17

标签: javascript jquery keycode

是否存在一些JavaScript / jQuery脚本将ASCII转换为keyCodekeypresskeyup dom事件返回的keydown

我正在思考类似的事情:

"A".toKeycode

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

1 个答案:

答案 0 :(得分:4)

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

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

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

我自己的要求仅限于处理数字和普通字母(接受或拒绝取决于字符串中的位置)并让控制字符(F键,ctrl-something)通过。因此,我可以检查控制字符,如果它不是我检查范围的控制字符,那么我才需要获得实际字符。鉴于我并不担心案例(我将所有字母都改为大写字母)并且已经限制了键码的范围,我只需要担心数字键盘。以下就足够了:

String.fromCharCode((96< =&& key< = 105)?key-48:key) 更一般地说,一个从charcode中可靠地返回字符的函数会很棒(可能是一个jQuery插件),但我现在没有时间写它。遗憾。

我还提到e.which(如果你使用的是jQuery)将e.keyCode和e.charCode标准化,这样你就不必担心按下了什么类型的键。将其与String.fromCharCode相结合的问题仍然存在。

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