2017-05-15 18 views
0

バーコードスキャナがあります。入力にピントがない場合のJavascriptキャッチ入力

ユーザーがバーコードで商品を検索することがあります。

しかし、彼は十分に怠惰であり、入力をクリックするためにマウスを使用したくはありません。

スキャナは通常、非常に高速で8〜13の記号を入力します。人間の種類はそれほど高速ではありません。

極端な入力を検出し、ページ上の入力要素にフォーカスがない場合(2)、特定のクラスの入力を選択し、スキャナの内容で入力して検索を開始するのに最適なソリューションです。

第2段階は問題ありません。私は最初のステージからどのように始めるべきか分かりません。

ライブラリはありますか?

バーコードリーダをプログラミングして、すべての入力をいくつかのキーの組み合わせで開始し、このキーを聞き、必要な入力に焦点を合わせることは、完璧な解決策ではありません。しかし、これは他の人の余分な仕事を必要とするでしょう。

完璧な解決策はありますか?

+0

これで、どのようなイベントが送信されますか? – epascarello

+1

@epascarello:今日のスキャナは、キーボードのボタンの押下をエミュレートする傾向があると思うので、スキャナとキーの押下とは分かっていないでしょう。 – musefan

+0

@musefan私はイベントを把握しようとしていましたので、キーの押下/書類の......... – epascarello

答えて

5

キー入力の対象がinputでない場合は、inputでそのキーに記入し、それが注力与えることによってdocumentkeypressに応えることができます:

document.addEventListener("keypress", function(e) { 
 
    if (e.target.tagName !== "INPUT") { 
 
    var input = document.querySelector(".my-input"); 
 
    input.focus(); 
 
    input.value = e.key; 
 
    e.preventDefault(); 
 
    } 
 
});
<input type="text" class="my-input">

私は私がデフォルトを防ぐことができなければ、Chromeにフォーカスを設定してinputの文字を(Firefoxではなく)タイプするように設定することに興味をそそられました。したがって、preventDefaultは、Chromeがそれをやめないようにします。

古いブラウザをサポートする必要がある場合は、keyではなく、keyCodeおよび/またはwhichで遊んでください。現代のChromeやFirefox、IE9 +では、MDNはkeyをサポートしています(Edgeについては言及していません)。

+0

かなり興味深い解決策と私がしたいことは、私は最初に一週間試してみましょう – Tebe

+0

いいえ、待っている音が悪い、それはちょうど動作します。ありがとう – Tebe

0

フォーム入力に焦点を当てずにIRスキャンをキャプチャする最も良い方法は、 "textInput"イベントをリッスンすることです。このイベントには、スキャンのデータが含まれます。

document.addEventListener('textInput', function (e){ 
    console.log('textInput', e.data) 
}); 

IRスキャンデータがフォーム入力に入るのを防ぐのも簡単です。フォーカスは入力上にあっても、例えば数量入力であっても、数量に影響を与えずにIR UPCコードを取り込むことができます。

document.addEventListener('textInput', function (e){ 
    if(e.data.length >= 6){ 
     console.log('IR scan textInput', e.data); 
     e.preventDefault(); 
    } 

}); 

私はこれをAndroid 4.4と7.0でCipherLab IRスキャナーでテストしました。

すべてのIRスキャナが 'textInput'イベントをトリガーすることは明らかではありません。

monitorEvents(document.body); 

ことで、IRスキャンをトリガー:お使いのデバイスがない場合は、それが持つ似た何かを放出しているかどうかを確認することができます。操作しなければならないすべてのイベントのコンソールログが表示されます。この監視のトリックはここにあります:How do you log all events fired by an element in jQuery?

+1

これは本当に質問に答えるものではありません。別の質問がある場合は、[質問する](https://stackoverflow.com/questions/ask)をクリックして質問することができます。十分な[評判](https://stackoverflow.com/help/)があれば、この問題にもっと注意を払うために[奨励金を追加](https://stackoverflow.com/help/privileges/set-bounties)することもできます何が評判か)。 - [レビューから](/レビュー/低品質の投稿/ 19061355) – alexi2

関連する問題