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