Zawieszanie się strony po takim kodzie.

0

Witam, po takim kodzie zawiesza mi się strona:

let numer = 0;

function ilosc()
{
	let rekordy = [...document.querySelectorAll('.wiersz')].length;
	let error = document.getElementById('error');
	
	
		setInterval(function ()
		{	
			while(numer < rekordy)
			{
				let ilosc = document.getElementById('ilosc'+numer).value;
				
				if(ilosc != "")
				{
					let cenastara = document.getElementById('cenatab'+numer).innerHTML;
				
					iloscInt = parseInt(ilosc);
					cenastaraFloat = parseFloat(cenastara);
					cenastaraFloat = Math.round(cenastaraFloat * 100) / 100;
			
					let cenanowa = iloscInt * cenastaraFloat;			
					document.getElementById('cenatab'+numer).innerHTML = cenanowa;

					numer++;
					
				}else{error.style.display='block';}
			};
		}, 2000);	
}

Wydaje mi się, że błąd gdzieś w pętli jest, ale szukałem, i nie znalazłem.

1

jak nie wejdzie w if to numer++ się nie wykona?

2

Pierwsza porada tak na szybko - skorzystaj z konsoli: https://developer.mozilla.org/pl/docs/Web/API/Console/log

Przy każdym przebiegu pętli wypisuj wartość zmiennych do konsoli. W ten sposób będziesz widział, jak się zmieniają ich wartości, dzięki czemu będziesz mógł zobaczyć, co się dzieje w tej pętli, jakie wartości są przypisywane do zmiennych, a przez to czy algorytm działa zgodnie z Twoimi oczekiwaniami oraz czy warunek wyjścia ma szansę na bycie spełnionym.

0

Szukałem w internecie, ale nie mogę znaleźć jak zrobić, aby funkcja odnosiła się do diva, w którym została naciśnięta?
W sensie, że mamy div id="div" i w nim inputa id="input" i jak zrobić, aby po naciśnięciu na tego inputa usuwał się ten div (innerHTML =""). Ważne, aby nie brać diva po id, albo name. Znalazłem this, ale nie rozumiem jego zastosowania, iwęc nie wiem czy to jest to

0

Daj może jakiś przykład, jak ta strona z DIV'ami wygląda - łatwiej będzie coś wykombinować.
Tak na szybko Ci coś zrobiłem - rzuć na to okiem i powiedz, czy w dobrym kierunki idziemy :D
https://jsfiddle.net/mbrd59oe/

0

Kod:


		while ($row = $wynik->fetch_assoc())
		{
			echo "
                        echo "<div id='tendiv'>"
			<tr id='wiersz".$numer."'>
				<td class='rekord'>".$odkodowanyProdukt."</td>	
				<td><input type='text' name='ilosc' id='ilosc".$numer."' placeholder='...' value='1'/></td>
				<td class='rekord'><div id='cenatab".$numer."'>".$row['cena']."</div></td>.
				<td><input type='button' name='usun' id='usun' onClick='' value=''/></td>
			</tr>";
			echo "</div>"
			$numer++;
		}
		

I w js, aby po naciśnięciu input id='usun' usuwało cały div id='tendiv'. Ale tak, aby nie używać id diva.

1

A dlaczego tam jest object (wiem co to objekt)

To jest tylko nazwa zmiennej/obiektu, który jest przekazywany do funkcji i na którym funkcja ma wykonać działania. Równie dobrze można w tym przykładzie zamienić to słowo na cokolwiek innego - np. posladek ;) Zobacz tutaj - zrobiłem to za Ciebie i nadal wszystko działa tak, jak powinno :D
https://jsfiddle.net/6d2xgerv/

0

Mam takie coś:

while ($row = $wynik->fetch_assoc())
		{
			echo "
			<div class='produkt' onclick='runscript(this)'>
			<tr id='wiersz".$numer."'>
				<td class='rekord'>".$odkodowanyProdukt."</td>	
				<td><input type='text' name='ilosc' id='ilosc".$numer."' placeholder='...' value='1'/></td>
				<td class='rekord'><div id='cenatab".$numer."'>".$row['cena']."</div></td>.
				<td><input type='button' name='usun' id='usun' onClick='' value=''/></td>
			</tr>
			</div>";
			$numer++;
		}

I js:

function runscript(usun)
{
	usun.querySelector('.produkt').style.background='red';
}

A konsola pokazuje:

TypeError: usun.querySelector(...) is null
Z tego wynika, że div jest pusty, ale dlaczego?

1

Zauważ, że nie przekopiowałeś dokładnie podanego przykładu. W moim kodzie onclick jest podpięty do elementu nadrzędnego/rodzica, ale akcje wykonuje na elemencie podrzędnym. Zobacz - DIV z onclick nie ma żadnego ID ani CLASS, natomiast CLASS jest przypisane do DIV'a "wsadzonego" do tego, który reaguje na onclick.

Skoro Ty zrobiłeś inaczej, to nie dziw się, że wyskakuje błąd - w Twoim przypadku ten sam DIV jest zarówno tym, który reaguje na kliknięcie, jak i na nim chcesz wykonać akcję. Ale ponieważ kod skopiowałeś z przykładu, w którym akcja miała być wykonana na dziecku, logiczne jest, że tego dziecka nie da się znaleźć, więc mamy zonk ;)

Ponieważ jawnie wskazujemy, na którym elemencie chcemy wykonać akcję, trzeba trochę uprościć treść funkcji runscript

function runscript(usun)
{
    usun.style.background='red';
}

Zrobiłem też działającą wersję na jsdiffle - zobacz, czy teraz jest OK - https://jsfiddle.net/1txu0c4d/ :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1