入力フィールドへの入力にバーコードスキャナーが使用されたかどうかを検出し、使用された場合はフォーカスを次のフィールドに移動するJavaScriptを少し書き終えたところです。
私のコードは、「スキャナー入力用にjQueryリスナーを設定したいのですが、jQueryの初心者です。すべてのキーボード入力をリッスンする必要がありますが、スキャナーからの入力を聞いたときにのみアクションを実行します。スキャナー入力が終了したとき。」
入力フィールドのHTMLは次のとおりです。
<input type="text" class="bcode" id="f1" onkeydown="typeSpeed(new Date().getTime());" onblur="typeSpeedReset();" onfocus="typeNextField('f2');" />
<input type="text" class="bcode" id="f2" onkeydown="typeSpeed(new Date().getTime());" onblur="typeSpeedReset();" onfocus="typeNextField('f3');" />
<input type="text" id="f3" />
バーコードスキャナーエントリ(f1とf2)を対象としたクラス「bcode」の2つのフィールドがあります。3番目のフィールドは、通常の入力(f3)を対象としています。フィールドf1およびf2は、(1)キーが押されたときの現在のタイムスタンプを関数'typeSpeed'に送信し、(2)フィールドがフォーカスを取得したときに選択する次のフィールドのIDを送信します。これらのフィールドは、フィールドがフォーカスを失ったときに関数'typeSpeedReset'の呼び出しもトリガーします。
これを機能させるjavascript/jQueryは次のとおりです。
$(function(){
var typingTimeout;
$('.bcode').keypress(function(e){
if (typingTimeout != undefined) clearTimeout(typingTimeout);
typingTimeout = setTimeout(isBarcode, 500);
});
});
var ts0 = 0, ts1 = 0, ts2, nf;
function typeSpeed(time) {
ts0 = (ts0 == 0) ? time : 0;
var ts3 = ts1;
ts1 = time - ts0;
ts2 = ts1 - ts3;
}
function typeSpeedReset() { ts0 = 0; ts1 = 0; }
function typeNextField(nextfield) { nf = nextfield; }
function isBarcode() {
if(ts2 < 20 && ts1 != 0) { $('#'+nf).focus(); }
}
何が起こるかというと、キーストローク間の時間は関数「typeSpeed」によって定量化されます。実験(キーボードをマッシュするか、キーを押したままにする)を通じて、人間の最速の入力には、キーストローク間で約33msの遅延があることがわかりました。私がテストに使用したバーコードスキャナーは、一般的に10ms以下の遅延を生成しました。
クラス'bcode'のフィールドにタイムアウトが設定され、入力が一時的に停止したことを検出します。この時点で、遅延が評価されます。20ms未満の場合、バーコードスキャナーが使用されたと見なされ、次のフィールドにフォーカスが与えられます。
このコードが作成されたプロジェクトは、フィールドの背景色を変更し、フォーカスがあるときにフィールドの右側に小さなバーコードグラフィックを表示することでさらに一歩進んで、ユーザーがバーコードスキャナーに応答し、バーコードスキャナーを対象としていることを明確に示します。入力。