我对 jQuery keydown 参数有疑问。我使用了一个条形码扫描仪,它在最后发送一个 12char 字符串和一个 CR LF。所以我希望最后一次调用keydown的ASCII码是13。我得到的是额外的 40 -> 13 40 (CR "(")。在 Notepad++ / C# 控制台应用程序等其他应用程序中,CR 被识别为最后一个字符。这是一个示例代码:
var keys = [];
$(document).keydown(function (e) {
keys.push(String.fromCharCode(e.which));
});
$(document).keyup(function () {
if(keys.length == 14)
{
handleCode();
}
});
function handleCode() {
var div = document.getElementById('out');
var html = '';
var numberOfKeys = keys.length;
//Last 2 keys == CR "("
for (var i=0; i < (numberOfKeys);i++) {
html += keys[i];
}
div.innerHTML = html;
keys = [];
}
有谁知道为什么最后有一个额外的“(”(ASCII码40)?
编辑:我发现扫描仪输出“12345CR”的以下行为:
Event on TextBox:
KeyDown: 49 50 51 52 53 13 ('12345CR')
KeyPress: 49 50 51 52 53 13 ('12345CR')
KeyUp: 49 50 51 52 53 13 40 ('12345CR(')
Event on Document:
KeyDown: 49 50 51 52 53 13 40 ('12345CR(')
KeyPress: 49 50 51 52 53 13 ('12345CR')
KeyUp: 49 50 51 52 53 13 40 ('12345CR(')
我最终使用了 KeyPress,它在附加到文档时工作得很好(我认为它只适用于文本框)。但我仍然想知道,40 ('(') 来自哪里。
这是更新的代码,现在可以正常工作:
var keys = [];
var startTime;
$(document).keypress(function (e) {
keys.push(String.fromCharCode(e.which));
if(keys.length == 13)
{
handleCode();
}
});
function handleCode() {
var div = document.getElementById('out');
var html = '';
var numberOfKeys = keys.length;
for (var i=0; i < (numberOfKeys);i++) {
html += keys[i];
}
div.innerHTML = html;
keys = [];
}