2012-02-24 10 views
15

可能性の重複:
Throttle event calls in jQueryjQueryの変更

私はjQueryのの.change()の機能を好き

が、私はAJAXリクエストする際のトンをトリガー防ぐしたいのですがユーザーは選択ドロップダウンのオプションをすばやく変更します。たとえば、ユーザーがマウスのスクロールホイールを使用すると、新しいオプションを選択するときに各オプションがトリガされます。

ユーザーが選択ドロップダウンを1秒間更新しなくても、これらの更新を送信するだけの適切な方法を考案したいと思います。

この状況をうまく処理する方法はありますか?

+5

あなたが探しているものは、*デバウンス*と呼ばれています。 –

答えて

60

これを行うための典型的な方法は、のsetTimeoutとてclearTimeoutである:

var wto; 

$('#select').change(function() { 
    clearTimeout(wto); 
    wto = setTimeout(function() { 
    // do stuff when user has been idle for 1 second 
    }, 1000); 
}); 
+3

wtoは何を表していますか? – Gisheri

+1

Window.TimeOut - 例えばランダムな選択肢です。 – glortho

+0

グローバル変数を作成したくない場合は、 '.data()'を使用してインターバルIDをselect要素自体に割り当てることができます。もう少しコードを追加しますが、グローバル変数の作成が気に入らない人もいます。 – Gavin

8

私はあなたがしてunderscore.jsを使用することをお勧めします。

var newFunction=_.debounce(function(){ 
    alert('You function, after use stop scroll') 
},1000); //Wait seconds after he stops 

$('#select').change(newFunction); 

underscore.debounceについては、こちらをご覧ください。