• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z "timerem"

VPS Starter Arubacloud
0 głosów
187 wizyt
pytanie zadane 14 października 2017 w JavaScript przez Adrian1999 Nałogowiec (34,570 p.)

Witam serdecznie, zgłaszam się tutaj ponieważ mam problem którego nie rozumiem. Mam taki oto kod 

function Start(time){
	var LocalTime = time; // Zmieniamy zmienną która nam przyszła na zmienną lokalną.
	
	document.getElementById("menu").innerHTML = LocalTime;
	if(LocalTime > 0)
	{
		LocalTime--;
		setTimeout(Start(LocalTime),10000);
	}
	
}

function SetAll()
{
	var TimeOut = 10; 
	//var Slide = true; 
	
	Start(TimeOut);
	
}

no i za każdym razem wyświetla mi 0, nie wiem czemu. Gdy skasuje ifa, który ustawia timeouta wyświetla mi pierwszą przypisaną wartość 

1 odpowiedź

+1 głos
odpowiedź 14 października 2017 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 14 października 2017 przez Adrian1999
 
Najlepsza
setTimeout(Start(LocalTime),10000);

W tym miejscu do setTimeout przekazujesz wynik wywołania funkcji Start. Dlatego setTimeout  nie działa tak, jak tego oczekujesz. Powinieneś albo przekazać callbacka, w którym dopiero wywołasz swoją funkcję (lepszy sposób), albo przesłać tam referencję ze zbindowanym parametrem LocalTime (gorszy sposób). Czyli

setTimeout(function () {
    Start(LocalTime);
},10000);

, albo:

setTimeout(Start.bind(null, LocalTime),10000);

 

komentarz 14 października 2017 przez Adrian1999 Nałogowiec (34,570 p.)
A jakbym chciał to zrobić w jednej funkcji, to jak zrobić  to by przypisanie zmiennej TimeOut zostało tylko raz? Zamiast bawić się w odsyłanie z 1szej funkcji do drugiej i z drugiej do pierwszej może to jakiś sposób by był, by po prostu wszystko wykonać tam.
komentarz 14 października 2017 przez ScriptyChris Mędrzec (190,190 p.)

Umieść tą zmienną w wyższym scope:

var time = 10;

function Start() { 
    document.getElementById("menu").innerHTML = time;

    if(time > 0) {
        time--;
        setTimeout(Start,2000);
    }
     
}
 
function SetAll() {      
    Start();     
}

 

Podobne pytania

0 głosów
1 odpowiedź 261 wizyt
pytanie zadane 8 maja 2018 w JavaScript przez TheFunny Gaduła (3,420 p.)
0 głosów
1 odpowiedź 271 wizyt
pytanie zadane 18 stycznia 2020 w Inne języki przez frostyuwu Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 319 wizyt
pytanie zadane 19 czerwca 2018 w Sieci komputerowe, internet przez kubekszklany Gaduła (3,230 p.)

92,958 zapytań

141,920 odpowiedzi

321,149 komentarzy

62,291 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...