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

Funkcja działa tylko w 1 przypadku

VPS Starter Arubacloud
+1 głos
422 wizyt
pytanie zadane 16 lipca 2021 w JavaScript przez Doge Gaduła (3,320 p.)
edycja 16 lipca 2021 przez Doge

Witam, mam następującą funkcję:

function upgraded_relicts(relict, relict_rank, action)
{
	if(relict_arr[relict] >= 2)
	{
		var random_number = Math.floor(Math.random()*100)+1;
		if(random_number <= upgrade_chance_arr[relict_rank])
		{
			relict_arr[relict] -= 2;
			relict_arr[relict_rank]++;
			console.log('ulepszanie się powiodło');
		}
		else
		{
			relict_arr[relict] -= 2;
			console.log('ulepszanie się nie powiodło');
		}
	}
	else
	{
		document.getElementById(`action${action}`).innerHTML = "You don\'t have enough relicts";
		setTimeout(function() 
		{
			if(selected_page == "upgrade_relicts1")
			{
				console.log(selected_page);
				switch(relict)
				{
					case 1:
						document.getElementById("action1").innerHTML = `<img src="img/relict1_1.png" class="relict" title="+${relict_bonus_arr[1]} coins per click" /> x2 ==> <img src="img/relict1_2.png" class="relict" title="+${relict_bonus_arr[5]} coins per click" /> x1 (${upgrade_chance_arr[2]}% chance of upgrade)`;
						break;
					case 2:
						document.getElementById("action2").innerHTML = `<img src="img/relict2_1.png" class="relict" title="+${relict_bonus_arr[2]} coins per second" /> x2 ==> <img src="img/relict2_2.png" class="relict" title="+${relict_bonus_arr[6]} coins per second" /> x1 (${upgrade_chance_arr[2]}% chance of upgrade)`;
						break;
					case 3:
						document.getElementById("action3").innerHTML = `<img src="img/relict3_1.png" class="relict" title="+${relict_bonus_arr[3]} coins if lucky" /> x2 ==> <img src="img/relict3_2.png" class="relict" title="+${relict_bonus_arr[7]} coins if lucky" /> x1 (${upgrade_chance_arr[2]}% chance of upgrade)`;
						break;
					case 4:
						document.getElementById("action4").innerHTML = `<img src="img/relict4_1.png" class="relict" title="+${relict_bonus_arr[4]}% luck" /> x2 ==> <img src="img/relict4_2.png" class="relict" title="+${relict_bonus_arr[8]}% luck" /> x1 (${upgrade_chance_arr[2]}% chance of upgrade)`;
						break;
				}
			}
			else if(selected_page == "upgrade_relicts2")
			{
				console.log(selected_page);
				switch(relict)
				{
					case 1:
						document.getElementById("action1").innerHTML = `<img src="img/relict1_2.png" class="relict" title="+${relict_bonus_arr[5]} coins per click" /> x2 ==> <img src="img/relict1_3.png" class="relict" title="+${relict_bonus_arr[9]} coins per click" /> x1 (${upgrade_chance_arr[3]}% chance of upgrade)`;
						break;
					case 2:
						document.getElementById("action2").innerHTML = `<img src="img/relict2_2.png" class="relict" title="+${relict_bonus_arr[6]} coins per second" /> x2 ==> <img src="img/relict2_3.png" class="relict" title="+${relict_bonus_arr[10]} coins per second" /> x1 (${upgrade_chance_arr[3]}% chance of upgrade)`;
						break;
					case 3:
						document.getElementById("action3").innerHTML = `<img src="img/relict3_2.png" class="relict" title="+${relict_bonus_arr[7]} coins if lucky" /> x2 ==> <img src="img/relict3_3.png" class="relict" title="+${relict_bonus_arr[11]} coins if lucky" /> x1 (${upgrade_chance_arr[3]}% chance of upgrade)`;
						break;
					case 4:
						document.getElementById("action4").innerHTML = `<img src="img/relict4_2.png" class="relict" title="+${relict_bonus_arr[8]}% luck" /> x2 ==> <img src="img/relict4_3.png" class="relict" title="+${relict_bonus_arr[12]}% luck" /> x1 (${upgrade_chance_arr[3]}% chance of upgrade)`;
						break;
				}
			}
			else if(selected_page == "upgrade_relicts3")
			{
				console.log(selected_page);
				switch(relict)
				{
					case 1:
						document.getElementById("action1").innerHTML = `<img src="img/relict1_3.png" class="relict" title="+${relict_bonus_arr[9]} coins per click" /> x2 ==> <img src="img/relict1_4.png" class="relict" title="+${relict_bonus_arr[13]} coins per click" /> x1 (${upgrade_chance_arr[4]}% chance of upgrade)`;
						break;
					case 2:
						document.getElementById("action2").innerHTML = `<img src="img/relict2_3.png" class="relict" title="+${relict_bonus_arr[10]} coins per second" /> x2 ==> <img src="img/relict2_4.png" class="relict" title="+${relict_bonus_arr[14]} coins per second" /> x1 (${upgrade_chance_arr[4]}% chance of upgrade)`;
						break;
					case 3:
						document.getElementById("action3").innerHTML = `<img src="img/relict3_3.png" class="relict" title="+${relict_bonus_arr[11]} coins if lucky" /> x2 ==> <img src="img/relict3_4.png" class="relict" title="+${relict_bonus_arr[15]} coins if lucky" /> x1 (${upgrade_chance_arr[4]}% chance of upgrade)`;
						break;
					case 4:
						document.getElementById("action4").innerHTML = `<img src="img/relict4_3.png" class="relict" title="+${relict_bonus_arr[12]}% luck" /> x2 ==> <img src="img/relict4_4.png" class="relict" title="+${relict_bonus_arr[16]}% luck" /> x1 (${upgrade_chance_arr[4]}% chance of upgrade)`;
						break;
				}
			}
			else if(selected_page == "upgrade_relicts4")
			{
				console.log(selected_page);
				switch(relict)
				{
					case 1:
						document.getElementById("action1").innerHTML = `<img src="img/relict1_4.png" class="relict" title="+${relict_bonus_arr[13]} coins per click" /> x2 ==> <img src="img/relict1_5.png" class="relict" title="+${relict_bonus_arr[17]} coins per click" /> x1 (${upgrade_chance_arr[5]}% chance of upgrade)`;
						break;
					case 2:
						document.getElementById("action2").innerHTML = `<img src="img/relict2_4.png" class="relict" title="+${relict_bonus_arr[14]} coins per second" /> x2 ==> <img src="img/relict2_5.png" class="relict" title="+${relict_bonus_arr[18]} coins per second" /> x1 (${upgrade_chance_arr[5]}% chance of upgrade)`;
						break;
					case 3:
						document.getElementById("action3").innerHTML = `<img src="img/relict3_4.png" class="relict" title="+${relict_bonus_arr[15]} coins if lucky" /> x2 ==> <img src="img/relict3_5.png" class="relict" title="+${relict_bonus_arr[19]} coins if lucky" /> x1 (${upgrade_chance_arr[5]}% chance of upgrade)`;
						break;
					case 4:
						document.getElementById("action4").innerHTML = `<img src="img/relict4_4.png" class="relict" title="+${relict_bonus_arr[16]}% luck" /> x2 ==> <img src="img/relict4_5.png" class="relict" title="+${relict_bonus_arr[20]}% luck" /> x1 (${upgrade_chance_arr[5]}% chance of upgrade)`;
						break;
				}
			}
		}, 2000);
	}
}

w skrócie chodzi o to, że jeżeli nie ma się danej ilości relictów, to funkcja podmienia zawartość diva na "You don't have enough relicts", a następnie jeżeli ktoś nie zmienił zakładki na stronie (np. nie przeszedł do zakładki shop lub na następną stronę w relict_shop), to podmienia wartość tego diva na poprzednią. Problem jest w tym, że działa to tylko i wyłącznie dla zakładki numer 1. (if(selected_page == "upgrade_relicts1")). Na innych zakładkach nie chce to działać. Jaki jest tego powód?

[edit]

Dodam też, że nie jest to kwestia kodu wewnątrz if'a, ponieważ przekopiowałem z zakładki 1 i również nie działa. Próbowałem również dostarczanie "selected_page" jako "page" w argumencie funkcji i wpisanie "page" do if'a, ale również działało tylko dla pierwszej zakładki. Po kliknięciu na stronę, również w funkcji przypisuję zmiennej "selected_page = "upgrade_relicts1";", "selected_page = "upgrade_relicts2";" itd.

W console.log() za każdym razem prawidłowo wyświetla numer strony, tylko nie chce podmienić innerHTML.

[EDIT2]

właśnie odkryłem, że problemem jest to, że w ogóle nie wykonuje się switch z case'ami ustalonymi w stronach od 2 do 4, ponieważ po dopisaniu console.log() w case, nawet nie dostaje się nic w konsoli. ALE kiedy dopiszę zamiast "case", "default" na końcu (dla pozostałych przypadków), wtedy wykonuje się default. Kiedy ustawiłem zmienną var relict = 1 na globalną, wtedy na każdej stronie dla action1 wykonuje się podmiana, lecz kiedy w funkcji podmieniam wartość, to na pierwszej stronie działa tylko dla 1, a na pozostałych w ogóle nie działa. W jaki sposób można to naprawić?

switch wygląda następująco:

				switch(relict)
                {
                    case 1:
                        document.getElementById("action1").innerHTML = `<img src="img/relict1_2.png" class="relict" title="+${relict_bonus_arr[5]} coins per click" /> x2 ==> <img src="img/relict1_3.png" class="relict" title="+${relict_bonus_arr[9]} coins per click" /> x1 (${upgrade_chance_arr[3]}% chance of upgrade)`;
                        console.log("nie zmieniono");
                        break;
                    case 2:
                        document.getElementById("action2").innerHTML = `<img src="img/relict2_2.png" class="relict" title="+${relict_bonus_arr[6]} coins per second" /> x2 ==> <img src="img/relict2_3.png" class="relict" title="+${relict_bonus_arr[10]} coins per second" /> x1 (${upgrade_chance_arr[3]}% chance of upgrade)`;
                        console.log("nie zmieniono");
                        break;
                    case 3:
                        document.getElementById("action3").innerHTML = `<img src="img/relict3_2.png" class="relict" title="+${relict_bonus_arr[7]} coins if lucky" /> x2 ==> <img src="img/relict3_3.png" class="relict" title="+${relict_bonus_arr[11]} coins if lucky" /> x1 (${upgrade_chance_arr[3]}% chance of upgrade)`;
                        console.log("nie zmieniono");
                        break;
                    case 4:
                        document.getElementById("action4").innerHTML = `<img src="img/relict4_2.png" class="relict" title="+${relict_bonus_arr[8]}% luck" /> x2 ==> <img src="img/relict4_3.png" class="relict" title="+${relict_bonus_arr[12]}% luck" /> x1 (${upgrade_chance_arr[3]}% chance of upgrade)`;
                        console.log("nie zmieniono");
                        break;
                    default:
                        console.log("wykonano default");
                        break;
                }
komentarz 16 lipca 2021 przez Doge Gaduła (3,320 p.)
1
komentarz 16 lipca 2021 przez VBService Ekspert (251,210 p.)

@Doge, Przed switch-em daj console.log(relict), żeby zobaczyć co zawiera zmienna relict.

                console.log("relict = ", relict);
                switch(relict)
                {
                    case 1:
                        . . .

                    default:
                        console.log("wykonano default");
                        break;
                }

 

1
komentarz 16 lipca 2021 przez Doge Gaduła (3,320 p.)
Właśnie znalazłem błąd, polegał on na tym, że po prostu relict zawiera liczby od 1 do 16, a action jest od 1 do 4. Relict jest od 1 do 4 na pierwszej stronie, na następnych od 5 do 8 itd. Kiedy zrobiłem switch na action, który jest argumentem funkcji, wszystko zaczęło działać. Zacząłem po prostu robić za dużo zmiennych, tablic, warunków itp. i mi się pomieszało.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 180 wizyt
pytanie zadane 11 stycznia 2020 w JavaScript przez Kolberg Obywatel (1,560 p.)
0 głosów
2 odpowiedzi 232 wizyt
0 głosów
1 odpowiedź 155 wizyt

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...