2017-05-08 78 views
0

我有一個間隔問題,在使用值調用該函數後,我無法清除問題。我無法清除間隔

的間隔繼續增加的數量,並返回寬度的百分比。

這裏我的代碼:

function loadingClient(data) { 

    var loadingClientDiv = document.getElementById('loadingClient'); 
    var percentageLoading = document.getElementsByClassName('percentageLoading'); 
    var charge = 1; 
    var intervalLoadingClient = setInterval(barCharge, 1000); 

    function barCharge() { 
     if (charge >= 76) { 
      clearInterval(intervalLoadingClient); 
     } else { 
      ++charge; 
      $(percentageLoading).css("width", charge + "%"); 
     } 
    } 

    if (data === "100") { 
     clearInterval(intervalLoadingClient); 
     $(percentageLoading).css("width", "100%"); 
     setTimeout(closeLoadingClient, 5000); 
     setTimeout(removeLoadingClient, 7000); 

     function closeLoadingClient() { 
      $(loadingClientDiv).hide("fade", 1000); 
     } 

     function removeLoadingClient() { 
      $(loadingClientDiv).remove(); 
     } 
    } 

} 

loadingClient(); 
+0

'interval'!=='timeout'。你要清理或設置錯誤的東西。 – deceze

+0

@deceze setInterval和setTimeout返回來自同一個池的ID,你可以*調用任何setXxx上的任何clearXxx,它們不會查看類型。 – Kaiido

回答

0

@hudolfhess是正確的,你需要使用clearInterval,而不是clearTimeout。

另外,

如果你試圖做這樣的事情它不會工作。

loadingClient() //Should start the interval. 
 
loadingClient("100") //Should clear the interval, but doesn't.

你想幹什麼?如果是這樣,則需要delcare intervalLoadingClient以外的範圍,並避免在調用具有參數的方法時重新聲明該變量。

var intervalLoadingClient; 
 
function loadingClient(data) { 
 

 
    var loadingClientDiv = document.getElementById('loadingClient'); 
 
    var percentageLoading = document.getElementsByClassName('percentageLoading'); 
 
    var charge = 1; 
 
    intervalLoadingClient = intervalLoadingClient || setInterval(barCharge, 1000); 
 

 
    function barCharge() { 
 
     if (charge >= 76) { 
 
      clearInterval(intervalLoadingClient); 
 
     } else { 
 
      ++charge; 
 
      $(percentageLoading).css("width", charge + "%"); 
 
     } 
 
    } 
 

 
    if (data === "100") { 
 
     clearInterval(intervalLoadingClient); 
 
     $(percentageLoading).css("width", "100%"); 
 
     setTimeout(closeLoadingClient, 5000); 
 
     setTimeout(removeLoadingClient, 7000); 
 

 
     function closeLoadingClient() { 
 
      $(loadingClientDiv).hide("fade", 1000); 
 
     } 
 

 
     function removeLoadingClient() { 
 
      $(loadingClientDiv).remove(); 
 
     } 
 
    } 
 

 
} 
 

 
loadingClient(); //Starts the interval 
 
loadingClient("100"); //Ends the interval.

0

嘗試使用的clearInterval代替clearTimeout

+0

是的,試圖解決它是一個錯誤,有更新代碼,但它不起作用。 –

+0

實際上,setTimeout和setInterval確實共享同一個索引池,因此您可以在間隔和超時時間內調用clearInterval和clearTimeout(儘管我不建議這樣做)。 – Kaiido