1

每 5 秒使用 setTimeout 我正在执行一个 jQuery 函数,如何通过单击 div 来停止该过程?

我的代码是:

function crono(selection){
    $.ajax({
        type: 'GET', 
        url: 'my_page.php', 
        data: {
            my_page: selection.attr('id')
        },
        success: function(data, textStatus, jqXHR) {
            selection.html(data);   
        }
    });
}


function repeat(){
    setTimeout(function() {
        $('.toReload').each(function(){
            crono($(this));
        });
        repeat();
    }, 5000);
}

repeat();
4

5 回答 5

1

使用clearTimeout https://developer.mozilla.org/fr/docs/DOM/window.clearTimeout

var handle = null;

function repeat(){
    handle  = setTimeout(function() {
        $('.toReload').each(function(){
            crono($(this));
        });
        repeat();
    }, 5000);
}

setTimeout并通过调用取消:

clearTimeout(handle);
于 2013-07-03T12:51:23.230 回答
1

使用标志来做到这一点。

var end = false;

function repeat(){
   setTimeout(function() {
      if(!end){ 
          $('.toReload').each(function(){
            crono($(this));
          });
          repeat();
      }     
   }, 5000);
}
...

$('#div').click(function(){
 end = true;
});
于 2013-07-03T12:53:48.700 回答
0

使用超时 ID。

var timeoutID = 0;
function repeat(){
     timeoutID = setTimeout(function() {
        $('.toReload').each(function(){
            crono($(this));
        });
        repeat();
    }, 5000);
}

repeat();

//stop the time out
clearTimeout(timeoutID);
于 2013-07-03T12:52:19.057 回答
0

您需要明确的超时和 ajax 请求:

    var getData = {
    handleTimeout : 0,
    handleAjax,

    crono : function(selection){
        $.ajax({
            type: 'GET', 
            url: 'my_page.php', 
            data: {
                my_page: selection.attr('id')
            },
            success: function(data, textStatus, jqXHR) {
                selection.html(data);   
            }
        });
    },

    repeat: function(){
        this = ob;
        this.handleTimeout = setTimeout(function() {
            $('.toReload').each(function(){
                ob.crono($(this));
            });
            repeat();
        }, 5000);
    },

    stopAll: function(){
        clearTimeout(this.handleInterval);
        this.handleAjax.abort();
    }
}

getData.repeat();
getData.stopAll();
于 2013-07-03T13:09:16.463 回答
0

使用clearTimeout功能

var timeout;

function repeat(){
    timeout = setTimeout(function() {
        $('.toReload').each(function(){
            crono($(this));
        });
        repeat();
    }, 5000);
}

并在 div 点击调用以下函数

function stopAjax(){
    clearTimeout(timeout);
}
于 2013-07-03T12:55:52.833 回答