0

ユーザーがバーコード スキャナーを使用して購入した製品のリストを作成できるようにする Web ページをプログラムしようとしています。バーコード スキャナは通常、通常のキーボード入力をエミュレートするため、これは特別なことではありません。

とにかく、バーコード スキャナーを使用するときに多くの人が画面を見ないことがわかったので、カーソルがバーコード入力フィールドにフォーカスされていないことに気付かないことがよくあります。

したがって、キーボード入力があり、Web ページにフォーカスされたフィールドがないたびに、javascript を起動しようとします (サウンドを再生します)。

しかし、私は立ち往生しています:1)10個のキーが次々に押された場合でも、JavaScriptを1回だけ起動するにはどうすればよいですか(数字ごとではなく、スキャンされたバーコードごとに1回だけサウンドを再生する必要があります)。2)「フィールドに焦点を当てていない」問題についてどうすればよいですか?この情報を DOM から取得する方法はありますか? または、ページの各フィールドについて、フォーカスがあるかどうかを確認する必要がありますか? 他のフィールド (バーコード入力フィールド以外) の数が変わる可能性があるため、これは不便です。

ご協力ありがとうございました。

ベネディクト。

4

2 に答える 2

1

以下は、「10個のキーが次々に押されても1回だけ」の部分を実行するコードです。

タイマーを使用して、1 秒後にカウンターをリセットします。この秒以内に別のボタンが押されると、タイマーが再起動されるため、誤ってカウンターがリセットされることはありません。テスト目的でしきい値を 10 秒ではなく 3 秒に設定しましたが、必要に応じて変更できます。

(function () {
    var counter = 0,
        timer,
        threshold = 3;


    document.addEventListener('keydown', function () {

        window.clearTimeout(timer);

        counter += 1;

        if (counter >= threshold) {
            console.log('do whatever you want');
            counter = 0;
        }

        timer = window.setTimeout(function () {
            counter = 0;
        }, 1000);

    });
})()

http://jsfiddle.net/gJC3M/2/

于 2013-01-08T07:50:26.193 に答える
-1

10個のキーが次々に押された場合でも、JavaScriptを1回だけ起動するにはどうすればよいですか

あなたは正気にそれをすることはできません。

代わりに、関数の起動時に変数を true に設定し、setTimeout を使用して X 秒後に false に設定します。イベント ハンドラー関数の先頭で、その変数が true かどうかをテストし、true の場合はすぐに戻ります。

「フィールドに焦点を当てていない」問題にどう対処できますか?

オブジェクトにバインドされたイベント ハンドラーを使用して、 event.targetをテストしdocumentます。

または、各入力に keydown イベントをバインドします (そして、event.stopPropagationを呼び出すようにします)。オブジェクトのキーダウンにバインドされた「入力に焦点を当てていない」コードを用意しdocumentます。

于 2013-01-08T07:06:49.787 に答える