我的条码扫描器存在字符代码问题,用于将字符输入到网络界面。
如果条形码的符号如 - (短划线/连字符/减号),它会给我字符代码189,这在许多字符集中都是正确的。实际上,如果我在扫描时选择了文本输入,它将按预期输入 - 字符。但是,如果我从全局文档拦截keypress或keyup事件并使用fromCharCode()函数自己构建字符串,而不是让浏览器处理它,我得到½字符,这当然是189的unicode转换代码。
在事件本身中,keyCode和“which”显示为189,而keyIdentifier为“U + 00BD”。不幸的是,我真正需要的charCode值总是为0。
当然,我现在可以在大约5秒钟内手动处理此转换。问题是我不知道我可能从扫描仪获得的完整代码集,我担心未来几周或几个月会出现未处理的角色,并会让人头疼。或者,我可以将原始字符代码上传到服务器并尝试在PHP中处理它。我更喜欢在客户端上处理它,但是出于时间和响应的原因。将假按键发送到不可见的文本输入可能也会起作用,但这是一个非常糟糕的解决方法。
似乎应该有一个更好的方法来做到这一点,我必须错过一些明显的东西。有没有人有任何想法?
答案 0 :(得分:5)
如果您通过获取密钥代码来拦截键盘处理并将其解释为fromCharCode
的字符,则会得到错误的结果,因为密钥代码只是识别按键,而不是字符。按键关联的字符取决于键盘驱动程序。
因此拦截程序需要知道键盘键分配。您可以使用通用Windows keycodes作为起点,但随后您的软件将依赖于系统。
答案 1 :(得分:1)
您可以使用charCodeAt();
var str = "HELLO WORLD";
var n = str.charCodeAt(0); //returns 72, the unicode value of H
答案 2 :(得分:1)
您应该使用keypress
事件来获取可靠的角色信息。所有浏览器都将字符代码存储在事件的which
属性中。除IE8及更低版本外,它们将字符代码存储在keyCode
属性中。
因此,要获取给定keypress
事件的正确字符代码,请使用以下命令:
document.addEventListener('keypress', function (event) {
// Get the proper character code
var charCode = (typeof event.which === 'number') ? event.which : event.keyCode;
// Do stuff
});
您可以通过打开新标签轻松测试结果,将其指向about:blank
并在开发人员工具控制台中输入以下内容:
document.addEventListener('keypress', function (event) {
// Get the proper character code
var charCode = (typeof event.which === 'number') ? event.which : event.keyCode;
console.log('charCode = ' + charCode);
console.log('fromCharCode returns ' + String.fromCharCode(charCode));
});
输入短划线时的输出:
charCode = 45
fromCharCode returns -
将此与观察keyup
事件进行比较。如果您更改上述示例以收听keyup
事件,则短划线的输出将为:
charCode = 189
fromCharCode returns ½
这是你可以使用的东西吗?如果您想了解更多关于使用键盘事件的恐惧,请this is a great piece on the subject。