0

我对 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 = [];
}
4

1 回答 1

1

你的问题并不完全清楚,无论如何我都很难相信任何浏览器都会出错。我已经设置了一个小小提琴来测试你想要完成的事情。希望它可以帮助您找出问题所在。

我在用

JSON.stringify

以可能更有用的方式显示结果。

于 2013-10-08T06:54:46.523 回答