7

livesearch 関数で ajax リクエストを調整するために、次のコード(別のユーザーによって作成された)を使用しています。

デモが必要な場合は JSFiddle: http://jsfiddle.net/4xLVp/

しかし、それはバグのようです。で値をクリアしCtrl+shift+back-arrow、再度入力すると、リクエストが殺到します。空白の値でもリクエストが発生します。特に、リクエストの遅延がより測定されているように見えるjQuery UI autocompleteと比較すると、正しくないようです。

    $('##tag-search').keyup(function() {
        var elem = $(this);
        if (elem.val().length >= 2) {
            elem.data('search',search).clearQueue().stop().delay(1000).queue(function() {
                $.ajax({ // ajax stuff
                    'success': function(data){ /*show result*/ }
                });
                if (elem.data('search') !=  string) return;
            });                                             
        } else if (string.length <= 1) { /*show original content*/ }
    });

これを処理するより良い方法はありますか?

4

1 に答える 1

7

私はちょうど使用しますsetTimeout

(function() {
    var timeout;
    $('#tag-search').keyup( function() {
        var elem = $(this);
        if (elem.val().length >= 2) {
            clearTimeout(timeout);
            timeout = setTimeout(function() {
               $.ajax({ // ajax stuff
                    'success': function(data){ /*show result*/ }
                });     
            }, 80); // <-- choose some sensible value here                                      
        } else if (string.length <= 1) { /*show original content*/ }
    });
}());

デバウンス/スロットルプラグインもあります。

于 2011-08-06T15:43:59.693 に答える