1

setTimeout最後に入力してから 1 秒後に実行するように設定しましkeyupた。ajaxサーバー側の検証を設定しています。

問題

何らかの理由で、これは 1 秒待ってから、2 回目の休憩を取る前に何回クリックしても発火します。最後のキーアップだけが ajax 呼び出しをトリガーするようにしたいと思います。

コード

   form.items = {
        init:function(){
            this.call();
        },
        call:function(){
            //Check all visible elements
            form.init.mainItems.each(function(){
                $(this).keyup(function(){
                    form.items.main($(this));
                });
            });
        },
        main:function(myself){
                    form.ajaxEvents.ajaxTimer = setTimeout(function(){form.ajaxEvents.call(myself);}, form.ajaxEvents.ajaxTimerSetting);
            }
        }
    };

  //Setting up the timer
 form.ajaxEvents.ajaxTimer = setTimeout(function(){
       form.ajaxEvents.call(myself);
 }, form.ajaxEvents.ajaxTimerSetting);

 form.ajaxEvents = {
     ajaxTimerSetting:1000,
     ajaxTimer:null,
     call:function(me){
         clearTimeout(form.ajaxEvents.ajaxTimer);
         //turn off so we wait for ajax to complete
            $.ajax({
                url:'registration/ajax/'+item,
                data:{"info":me.val()},
                type:'post',
                success:function (data) {
                    //data
                }
            });
        }
    };

Jsフィドル

完全に機能するコードとエラーの説明のための JS Fiddle

4

2 に答える 2

2

これがお役に立てば幸いです。

var timer;

$("input").on('keyup', function() {
    clearInterval(timer);  //clear any interval on key up
    timer = setTimeout(function() { //then give it a second to see if the user is finished
        //do .post ajax request //then do the ajax call
    }, 1000);
});
于 2014-05-16T17:05:22.627 に答える
0

イベントkeyupが発生したとき、最初に以前に作成された既存のタイムアウトがないことを確認する必要があると思います。そうしないと、1 秒のタイムアウトが多数発生します。すでにタイムアウトがある場合は、clearTimeout(id_timeout)関数を使用してキャンセルする必要があります。次に、1 秒のタイムアウトを設定するだけです。

を使用してform.ajaxEvents.ajaxTimer既存のタイムアウトに関する情報を保存すると、次のようになります。

main:function(myself){
    // verify if existing timeout
    if(form.ajaxEvents.ajaxTimer != null) {
        clearTimeout(form.ajaxEvents.ajaxTimer);
    }
    // finally
    form.ajaxEvents.ajaxTimer = setTimeout(function(){form.ajaxEvents.call(myself);}, form.ajaxEvents.ajaxTimerSetting);
}

そしておそらくform.ajaxEvents.ajaxTimer = null、トリガーされた関数に a を追加します。

于 2013-04-15T08:35:12.910 に答える