2013-07-03 144 views
1

每5秒setTimeout我正在執行一個jQuery函數,我怎麼能通過點擊一個div來停止進程?停止一個jQuery函數

我的代碼是:

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(); 
+0

在什麼你想阻止它嗎?只需調用'clearTimeout(var)',其中'var'是要清除的定時器。 –

+0

使用指定的超時時間,並在需要取消時調用'clearTimeout'。 – Mansfield

回答

0

使用超時ID。

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

repeat(); 

//stop the time out 
clearTimeout(timeoutID); 
+1

您正在函數中將'timeoutID' var重新定義爲loval var。它不會工作 – sdespont

+0

感謝您的審查。編輯 –

+0

對不起,但它是相反的:var聲明必須在函數之外,而不是在裏面。 – sdespont

1

使用標記來做到這一點。

var end = false; 

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

$('#div').click(function(){ 
end = true; 
}); 
0

使用clearTimeout功能

var timeout; 

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

,並在DIV點擊調用下面的函數

function stopAjax(){ 
    clearTimeout(timeout); 
} 
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();