Laravelアプリケーションでバーコードスキャナーを使用したい。これはオンラインのPOSアプリケーションです。バーコードスキャナーが文字列のみを返し、Enterボタンを押すことを知っています。しかしこの文字列をキャプチャするにはIフォームを使用して入力フィールドも選択する必要があります。入力フィールドを選択しないとデータをキャプチャできません。フォームを選択せずにバーコードスキャナーを操作したいのですが、とにかく可能ですか?
はい、2つの方法があります。
autofocus
属性
<input id="barcodeInput" type="text" autofocus>
autofocus
属性を使用できますが、これはどのブラウザでもサポートされていない可能性があります。
Javascriptを使用する
これは、autofocus
属性のフォールバックです。
window.onload = function() {
var input = document.getElementById("barcodeInput").focus();
}
これにより、ページがID barcodeInput
の入力内に読み込まれるとすぐにフォーカスが設定されます。
JQuery
を使用している場合は、次の方法で実行できます。
$(document).ready(function() {
$('#barcodeInput').focus();
});
バーコードリーダーがJavaScriptで送信するキー押下をキャプチャできます。
イベントリスナーをウィンドウまたはドキュメントオブジェクトに追加して、ドキュメント内の任意の場所でのキー押下をキャプチャします。着信文字をチェックして、バーコードの終わりを示す文字(おそらく改行)を探します。
これは、RFIDリーダーを使用して同様のタスクのために作成したコードです。これはjQueryに依存します(主に、正規化jQueryがevent.which
押された文字の識別が便利になります)が、必要に応じてそれを回避するように書き直すことができます。
Enterキー(使用していたRFIDリーダーが各スキャン後に送信されたもの)でない限り、各キー押下を配列に格納します。 Enterを取得すると、スキャンされたコードを取得して処理し(Socket.IOを使用してサーバーに送信します。好きなように実行できます)、次のスキャンで配列をクリアできるようにします。新鮮なものから始めましょう。
var keybuffer = [];
function press(event) {
if (event.which === 13) {
return send();
}
var number = event.which - 48;
if (number < 0 || number > 9) {
return;
}
keybuffer.Push(number);
}
$(document).on("keypress", press);
function send() {
socket.emit('scan', keybuffer.join(""));
keybuffer.length = 0;
}