1

次の方法でテキスト ボックスにキー入力された入力に基づいて、いくつかのフィルター操作を実行しています。

$("#search").on('change keyup', function () {
    var search = $.trim($(this).val());
    ...perform search based operation
});

私が直面している問題は、入力がすばやく入力されると、取得された最新の値.val()が常に最新ではないということです。たとえば、検索変数の値をコンソールに記録し、「jquery」を検索する場合。これは、すばやく入力したときに記録されるものです。

ログ: j
ログ: j
ログ: j
ログ: j
ログ: j
ログ: j

キーストロークを遅くすると、正しい結果が得られます。

ログ: j
ログ: jq
ログ: jqu
ログ: jque
ログ: jquer
ログ: jquery

検索ベースの操作を削除して.onキーストロークをログに記録すると、すべてが正しくログに記録されます。これは何らかのタイミングの問題である可能性がありますが、これが既知のものであるかどうかはわかりません。これをIE9 / jQuery 1.9.1に対して実行しています。誤った値の原因は何ですか?

更新: フィドル: http://jsfiddle.net/bPuJ5/15/

ここに画像の説明を入力

4

1 に答える 1

1

keydownの代わりに使用することをお勧めしkeyupます。

フィドル

Keyup は、キーを離すとトリガーされます。すばやく入力するか、キーを押したままにすると、キーが押されなくなるまで keyup イベントがトリガーされないようです。

キーを押すたびに関数をトリガーしたくない場合は、検索を実行するかどうかを確認するために、最後のキーストローク チェックから短い遅延または経過時間を実装できます。

于 2013-05-29T15:33:43.463 に答える