13

我在使用用于将字符输入到 Web 界面的条码扫描仪时遇到字符代码问题。

如果条形码具有诸如 - (破折号/连字符/减号)之类的符号,它会给我字符代码 189,这在许多字符集中都是正确的。事实上,如果我在扫描时选择了文本输入,它将按预期输入 - 字符。但是,如果我从全局文档中截取 keypress 或 keyup 事件并使用 fromCharCode() 函数自己构建字符串,而不是让浏览器处理它,我会得到 ½ 字符,这当然是 189 的 unicode 转换代码。

在事件本身中,keyCode 和“which”都显示为 189,而 keyIdentifier 是“U+00BD”。不幸的是,我真正需要的 charCode 值始终为 0。

现在我当然可以在大约 5 秒内手动处理这个转换。问题是我不知道可能从扫描仪获得的完整代码集,而且我担心未处理的字符会在未来数周或数月后出现并让人头疼。或者,我可以将原始字符代码上传到服务器并尝试在 PHP 中处理它。不过,出于时间和响应性的原因,我更愿意在客户端处理它。将假按键发送到不可见的文本输入可能也可以,但这是一个非常棘手的解决方法。

似乎应该有更好的方法来做到这一点,而且我必须遗漏一些明显的东西。有没有人有任何想法?

4

3 回答 3

5

如果您通过获取键码并将它们解释为带有 的字符来拦截键盘处理fromCharCode,则会得到错误的结果,因为键码只是识别按键,而不是字符。与按键相关的字符取决于键盘驱动程序。

所以拦截例程需要知道键盘按键分配。您可以使用常见的Windows 键码作为起点,但您的软件将依赖于系统。

于 2013-10-09T17:36:34.040 回答
2

您可以使用 charCodeAt();

var str = "HELLO WORLD";
var n = str.charCodeAt(0); //returns 72, the unicode value of H

参考: http ://www.w3schools.com/jsref/jsref_charCodeAt.asp

于 2015-12-16T08:30:42.883 回答
2

您应该使用该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 ½

这是你可以使用的东西吗?如果您想了解更多关于使用键盘事件的恐惧,这是一篇关于该主题的精彩文章

于 2015-12-16T12:49:32.777 回答