• 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
567 wizyt
pytanie zadane 16 lipca 2021 w JavaScript przez Doge Gaduła (3,420 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,420 p.)
1
komentarz 16 lipca 2021 przez VBService Ekspert (255,440 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,420 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 205 wizyt
pytanie zadane 11 stycznia 2020 w JavaScript przez Kolberg Obywatel (1,560 p.)
0 głosów
2 odpowiedzi 247 wizyt
0 głosów
1 odpowiedź 190 wizyt

92,845 zapytań

141,784 odpowiedzi

320,859 komentarzy

62,178 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!

...