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

Problem z var i.

Object Storage Arubacloud
+1 głos
150 wizyt
pytanie zadane 8 grudnia 2015 w JavaScript przez ShiroUmizake Nałogowiec (46,300 p.)
window.onload = function changeColor ()
{
var i=0;
var id = setInterval ( function(){changeColor()}, 2000);
if(i <= 5)
	{
	arr[i].style.backgroundColor = "white";
	i++;
	}
	else if(i >= 5)
	{
	var i=0;
	}
	alert(i);
}

Cokolwiek bym nie zrob sił. I zawsze jest równe, ponieważ var i jest równe zero i nie przydziela mu swojej nowej wartośći. Jakieś pomysły, jak tego  unikać albo jak rozwiązać ten problem.

4 odpowiedzi

0 głosów
odpowiedź 8 grudnia 2015 przez Comandeer Guru (602,340 p.)
wybrane 8 grudnia 2015 przez ShiroUmizake
 
Najlepsza

JS ma zasięg funkcyjny, więc zmienna istnieje wewnątrz wywoływanej funkcji changeColor. Z tego powodu przy każdym kolejnym wywołaniu tej funkcji zmienna jest tworzona na nowo z wartością równą 0.

Osobiście do window.onload przypisałbym funkcję anonimową, a dopiero w niej zadeklarował funkcję changeColor, a na zewnątrz niej - zmienną i.

komentarz 8 grudnia 2015 przez Magicone Nałogowiec (45,100 p.)
liczyłem, że zasugerujesz użycie listenera, a nie .onload :vv
komentarz 8 grudnia 2015 przez Comandeer Guru (602,340 p.)

To też ;) Zaproponowałem najprostsze rozwiązanie.

Osobiście przerzuciłbym to na koniec body i po prostu otoczył IIFE.

komentarz 8 grudnia 2015 przez ShiroUmizake Nałogowiec (46,300 p.)
Listener nie lubi zbytnio window :). Po głębszym zastanowieniu zrobię to w CSS :). Już mam sporą obciążoną pamieć przeglądarki.

 

PS: Po setInterval-u zacięło mi tak kompa, że przy ponownym uruchomieniu sprawdzał czy RAM przypadkowo się nie uszkodził.
komentarz 8 grudnia 2015 przez Comandeer Guru (602,340 p.)

Listener nie lubi zbytnio window :)

Hę? A to niby czemu? 

komentarz 9 grudnia 2015 przez Magicone Nałogowiec (45,100 p.)

Bo chyba nie wie, czym się różni event document.DOMContentLoaded od window.load... :) PS. interval raz, że jest wykonywany z poziomu silnika JS przeglądarki, która w razie wtopy zatrzyma skrypt, dwa, że jest to jak podejrzewam spowodowane nieumiejętnym posługiwaniem się tą funkcją.

 

moje rozwiązanie: 

window.addEventListener('load', function() {
	var i = 0;

	function changeColor() {
		if(i <= 5) {
			arr[i].style.backgroundColor = '#fff';
			i++;
		}
		else {
			i = 0;
		}

		alert(i);
		setTimeout(changeColor, 2000);
	};

	changeColor();
}, false);

 

+1 głos
odpowiedź 8 grudnia 2015 przez tymon_rogowski Bywalec (2,960 p.)
Zaraz.. zaraz. Co Ty właściwie próbujesz osiągnąć tym kodem? :)

'l zawsze' to literówka? Możesz zmienić nazwę zmiennej z "i" na coś innego bo to mylące :)
0 głosów
odpowiedź 8 grudnia 2015 przez Michał628496 Pasjonat (17,340 p.)
W 12 linicje napisz po prostu i=0
komentarz 8 grudnia 2015 przez ShiroUmizake Nałogowiec (46,300 p.)
W ciągu dalszym i nie rośnie
0 głosów
odpowiedź 8 grudnia 2015 przez criss Mędrzec (172,590 p.)
W tym else ifie deklarujesz nową zmienną. O tej samej nazwie. To nie ma prawa działać
komentarz 8 grudnia 2015 przez Comandeer Guru (602,340 p.)
Akurat ten fragment jest jak najbardziej poprawny z punktu widzenia składni JS…
komentarz 8 grudnia 2015 przez criss Mędrzec (172,590 p.)
Oops, to przepraszam w takim razie :|

Podobne pytania

0 głosów
4 odpowiedzi 155 wizyt
pytanie zadane 23 września 2018 w JavaScript przez EteerYT Początkujący (480 p.)
0 głosów
1 odpowiedź 196 wizyt
pytanie zadane 15 stycznia 2019 w JavaScript przez PROFF Obywatel (1,180 p.)
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 7 marca 2023 w JavaScript przez jasper93 Obywatel (1,310 p.)

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...