2

テキスト入力で呼び出したい jQuery Ajax リクエストがあるので、 内にネストしましたkeyup(function()。これはうまくいきます。

$("#text_box").keyup(function() {
 //AJAX REQUEST
});

しかし、これは時々バグのある振る舞いをします。テキストを非常に速く入力すると、元の入力単語の最後の文字が省略された入力単語の結果が得られます (ブラウザの障害の可能性があります)。入力アクティビティが 1 秒間ないときに ajax リクエストを送信する必要があります。つまり、テキストを非常に速く入力し、1 秒間休む場合 (入力を行ったことを意味します)。これどうやってするの?

4

3 に答える 3

7

以前の ajax 呼び出しから結果を取得したかのように聞こえます。と でタイマーを使用しsetTimeoutますclearTimeout

var timer = null;

$("#text_box").keyup(function() {
  if(timer) {
    clearTimeout(timer);
  }

  timer = setTimeout(someFunction, someDelay);
});

someFunctionajax 呼び出しを実行する関数はどこにありsomeDelay、ユーザーが入力した後、呼び出しを実行する前に待機する遅延 (ミリ秒) です。

于 2012-05-31T11:01:43.560 に答える
3

すでに jQuery を使用しているため、Ben Alemanのdebounceプラグインを使用できます。

ページの例

// Bind the not-at-all debounced handler to the keyup event.
  $('input.text').keyup( text_1 );

  // Bind the debounced handler to the keyup event.
  $('input.text').keyup( $.debounce( 250, text_2 ) ); // This is the line you want!
于 2012-05-31T11:04:14.427 に答える
1

ああ、神様。2014年に検索する人のために...

function sendAjax() {
    setTimeout(
        function() {
            $.ajax({
                url: "url.php",
                type: "POST",
                data: data,
                success: function(data) {
                    $("#result").html(data);
                }
            });
        }, 2000);
}

<input onkeyup="function()">
于 2014-07-16T07:16:23.447 に答える