2017-05-08 7 views
0

Ich habe ein Problem mit dem Intervall, das ich nicht nach dem Aufruf der Funktion mit einem Wert löschen kann.Ich kann das Intervall nicht löschen

Das Intervall erhöht weiterhin die Anzahl und gibt den Prozentsatz der Breite zurück.

Hier mein Code:

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'. Du räumst entweder auf oder legst das Falsche auf. – deceze

+0

@deceze setInterval und setTimeout gibt IDs aus dem gleichen Pool zurück, und Sie * können * jedes clearXxx auf jedem setXxx aufrufen, sie sehen sich den Typ nicht an. – Kaiido

Antwort

0

@hudolfhess ist richtig, Sie müssen clearInterval anstelle von clearTimeout verwenden. Auch

,

Wenn Sie versuchen, so etwas wie dieses wird es nicht zu tun.

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

Sie versuchen zu tun? Wenn dies der Fall ist, müssen Sie intervalLoadingClient außerhalb des Geltungsbereichs deaktivieren und eine erneute Deklaration der Variablen vermeiden, wenn Sie die Methode mit Parametern aufrufen.

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

Versuchen clearInterval statt clearTimeout verwenden.

+0

Ja, es war ein Fehler zu versuchen, es zu lösen, gibt es den Code aktualisieren, aber es funktioniert nicht. –

+0

Eigentlich teilen setTimeout und setInterval den gleichen Pool von Indizes, so dass Sie ClearInterval und ClearTimeout für Intervalle und Timeouts aufrufen können (obwohl ich nicht empfehlen, es zu tun). – Kaiido

Verwandte Themen