0

jQuery のキーダウン パラメータに問題があります。最後に 12 文字の文字列と CR LF を送信するバーコード スキャナーを使用します。したがって、キーダウンの最後の呼び出しには 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 に答える