8

こんにちは、オートコンプリート入力テキストをセットアップしました。ボタンをクリックしてEnterキーを押すと、テーブルを再印刷するイベントを発生させようとしています。btn クリックは正常に機能しますが、Enter キーを押すと、停止する前に数回起動するようです (つまり、テーブルがちらつきます)。

$('body').bind('keypress', function(e) {
        if(e.keyCode==13){
             var str = $('#Filter').val();
            $('#Table').fadeOut("slow").load('printShorts.server.php?Sortby=<?echo $sort;?>&dir=<?echo $direction;?>&filter='+encodeURIComponent(str)+'&usergroup=<?=$usergroup?>&no-cache=' + (new Date()).getTime() ).fadeIn("slow");
        }

}); 

常に発生するわけではなく、ブラウザによって動作が異なります..

4

6 に答える 6

14

keydown イベントを HTML テキストボックスと組み合わせても、複数回発生するのを防ぐには不十分です。この動作は、keydown イベントの jquery デモ セクションで確認できます: http://api.jquery.com/keydown/

考えられる解決策の 1 つは、イベントハンドラ「one」を使用することです ( http://api.jquery.com/one/を参照)。これにより、イベントが 1 回だけ処理されるようになります。

jQuery("#createNewProduct").one("keydown", function (e) {
    //Do Stuff
});
于 2012-11-12T14:10:50.450 に答える
8

これは keypress イベントの正しい動作です。keypress イベントは、キーが押されている限り発生し続けます (たとえば、テキストエリアで char キーを押し続けると、char が何度も追加されます。これは keypress に関連しています)。1 回限りの処理条件の場合は、要件に応じてキーダウン イベントまたはキーアップ イベントを使用します。キーアップとキーダウンの両方が一度だけ発生します。次のようになります。

{Key-Down} {Key-Press} {Key-Press} ..(as long as key is down).. {Key-Press} {Key-Up}
于 2012-06-13T12:12:59.250 に答える
4

http://api.jquery.com/keypress/

keypress イベントは、ブラウザーがキーボード入力を登録するときに要素に送信されます。これは、キーの繰り返しの場合を除いて、keydown イベントに似ています。ユーザーがキーを押したままにすると、keydown イベントが 1 回トリガーされますが、挿入された文字ごとに個別の keypress イベントがトリガーされます。さらに、修飾キー (Shift など) は keydown イベントをトリガーしますが、keypress イベントはトリガーしません。

代わりにキーダウンを使用してください。

于 2012-06-13T12:11:20.757 に答える
1

「keypress」を「keydown」に変更してみてください。

keypress イベントは、ブラウザーがキーボード入力を登録するときに要素に送信されます。これは、キーの繰り返しの場合を除いて、keydown イベントに似ています。ユーザーがキーを押したままにすると、keydown イベントが 1 回トリガーされますが、挿入された文字ごとに個別の keypress イベントがトリガーされます。

http://api.jquery.com/keypress/から

于 2012-06-13T12:13:23.237 に答える