3

HTML 入力タグを使用して単純な検索バーを作成しています。

<input type="text" id="search_bar" />

次に、jQuery で keypress メソッドを実装して、ユーザーが Enter/Return キーを押したことを検出します。

$('#search_bar').keypress(function(e) {
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return
        e.preventDefault();
        //do stuff
    }
});

ただし、ユーザーが Enter キーを押し続けると決定した場合、このメソッドは複数回呼び出されます。この動作を無効にしたいです。つまりkeypress、ユーザーがEnterキーを押したときに一度だけ呼び出され、キーが押されたときに再度呼び出されません。これを達成するための最良の方法は何ですか?

ありがとう。

4

5 に答える 5

4

を使用onkeyup()すると、キーが離されたときにのみ検出されます。これで、ホールディング エンターの問題が解決するはずです。

$('#search_bar').keyup(function(e) {
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return
        e.preventDefault();
        console.log("xx");
    }
});

Enter キーを押したままにします -- xx はリリースにのみ記録されます。

フィドル: http://jsfiddle.net/veRkd/

于 2013-04-22T19:31:47.723 に答える
2

keydownまたはを使用してみてくださいkeyup。それはおそらくkeycode価値を変えるでしょう。

于 2013-04-22T19:30:00.990 に答える
2

あなたが経験しているのは の動作であるため、タイマーを使用できます(keypressキーの押下をカウントするために使用できますが、すべてのブラウザーですべてのエッジケースを追跡するのはおそらく難しいでしょう)。keyupkeydown

$('#search_bar').keypress(function(e) {
    if(e.keyCode == 13 && !e.shiftKey) { // enter/return
        e.preventDefault();

        if (window.preventDuplicateKeyPresses)
            return;

        window.preventDuplicateKeyPresses = true;
        window.setTimeout(function() { window.preventDuplicateKeyPresses = false; }, 500 );

        //do stuff
    }
});
于 2013-04-22T19:31:39.590 に答える
1

代わりにKeydownまたはKeyupイベントを使用してみてください。キーが 1 つの状態から別の状態に変化した場合にのみ発生します。

于 2013-04-22T19:31:32.817 に答える