Znikanie treści podczas wykonywania skryptu w JS

Znikanie treści podczas wykonywania skryptu w JS
Qbisiek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 160
0

W ramach przypomnienia sobie podstaw z JavaScript napisałem taki krótki skrypcik testowy, którego zadaniem jest "dynamiczne odliczanie". Sama funkcja odliczająca działa ale powoduje ona skasowanie treści, która była wypisana wcześniej.

Kopiuj
<script type="text/javascript" charset="UTF-8">
		
		var x = y = z = 5; // wszystkie zmienna mają wartość 5
		var a =10;
		
		document.write("zmienna 'a' ma wartość: " + a +"<br>");
		document.write("x+y+z =  " + (x+y+z)+ "<br>");
		
		var iterator = 0;
		
		function DelayTest()
		{
			document.write("odliczono:" + iterator + '<br>');
			iterator ++;
			
			if(iterator > 9)
				{return true;}
				
			setTimeout("DelayTest()", 1000);
		}
		
		DelayTest();
		
	</script>

Konkretnie, funkcja powoduje zniwelowanie wcześniej wykonanych:

document.write("zmienna 'a' ma wartość: " + a +"
");
document.write("x+y+z = " + (x+y+z)+ "
");

Ktoś wie dlaczego tak się dzieje i jak temu zaradzić ?

Ola Nordmann
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 414
0

Przed wywołaniem funkcji interpreter JS automatycznie zamyka strumień (strona się załadowała) i document.write() wywołuje automatycznie document.open() - co automatycznie czyści dokument.

Dodaj tag do części wypisywanej w funkcji, a całość wykonaj dopiero po załadowaniu strony.
Nie zapisujesz wtedy document.write(), tylko:

Kopiuj
document.getElementById('Delay').write();
Qbisiek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 160
0

Hmmm... Chyba Cię źle zrozumiałem. Napisałem coś takiego:

Kopiuj
<script type="text/javascript" charset="UTF-8">
		
		var x = y = z = 5; // wszystkie zmienna mają wartość 5
		var a =10;
		
		document.write("zmienna 'a' ma wartość: " + a +"<br>");
		document.write("x+y+z =  " + (x+y+z)+ "<br>");
		
		var iterator = 0;
		
		function DelayTest()
		{
			document.getElementById("Delay").write("odliczono:" + iterator + '<br>');
			iterator ++;
			
			if(iterator > 9)
				{return true;}
				
			setTimeout("DelayTest()", 1000);
		}
		
		DelayTest();
		
	</script>
	
	<div id="Delay">
	</div>
	
	po funkcji

Efekt jest taki jakby funkcja w ogóle się nie wykonała. Mógłbyś trochę rozjaśnić rozwiązanie ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.