是否存在一些JavaScript / jQuery脚本将ASCII转换为keyCode
,keypress
和keyup
dom事件返回的keydown
?
我正在思考类似的事情:
"A".toKeycode
编辑:我问是否有人制作了一些脚本,将所有ASCII字符转换为正确的键码。所以" ".toKeycode
也应该有用。
答案 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十进制字符重叠。