1

私は次のコードを持っていますが、うまく機能します。問題は、ユーザーが単語を書き終えると、スクリプトがポストコールを作成し続け、提案リストを絶えず変更することです。

ユーザーが単語を書き続けると、スクリプトがすべての投稿呼び出しを停止して、最後の呼び出しのみを実行するようにしたいと考えています。

$("#inputString").keydown(function() {
lookup($(this).val());
//alert('a');
});

function lookup(inputString) {
if(inputString.length == 0) {
    $('#suggestions').fadeOut(); // Hide the suggestions box
} else {
    $.post("../jsonshow.php", {q: ""+inputString+""}, function(data) { // Do an AJAX call
        $('#suggestions').fadeIn(); // Show the suggestions box
        $('#suggestions').html(data); // Fill the suggestions box
    });
}
}
4

4 に答える 4

2

setTimeoutを使用して、ポストが発生するまでのキーストローク間の一定の時間を設定できます。- 次に、 clearTimeoutを使用してキーストロークごとにタイマーをクリアします

var action;
$('#inputString').keydown(function(){
    clearTimeout(action);     
    var $el = $(this);   
    action = setTimeout(function(){
        lookup($el.val());
    },1000); // <-- amount of time in ms before your post will run
});​

http://jsfiddle.net/gunuW/

于 2012-12-11T16:52:21.300 に答える
0

キーダウンイベントでAJAXリクエストを送信することを提案します。つまり:

$("#searchBox").keydown(function() {
    lookup($(this).val());
});

これは、ユーザーが何かを入力したときにのみ AJAX 要求を送信します。

編集:
私はJSFiddleを作成しましたが、それを行うと、keyup代わりにそうする必要があることに気付きましたkeydown(キーダウンを使用すると、入力で入力された文字を取得できません)。

これがフィドルです:http://jsfiddle.net/11684/sjCTZ/1/

于 2012-12-11T16:43:38.150 に答える
0

このようなものが動作するはずです:

function lookup(inputString) {
   if (...
   else if (!$("#suggestions").data('blocking')) {
       $("#suggestions").data('blocking', true);
       $.post(...function (data) {
          ...
          $("#suggestions").data('blocking', false);
       });
   }
}

$("#suggestions").data('blocking')これは、ミューテックスが falseに設定されている場合にのみ ajax リクエストを実行します。リクエストの前に true に設定され、リクエストの完了後に false に設定されます。

于 2012-12-11T16:45:42.783 に答える
0

入力後の検索。次の例を確認してください: http://www.openjs.com/scripts/events/check_after_typing.php

于 2012-12-11T16:47:56.860 に答える