Fehler, den ich nicht verstehe

Prophet05

Erfahrenes Mitglied
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
	<head>
		<title></title>
		<script type="text/javascript">
			<!--
				const CountdownText = new Array('Es dauert noch ', ' bis sie den n&auml;chsten Sprung durchführen k&ouml;nnen.');
				const CountdownFinished = 'Sie können nun springen!';

				function _Countdown(display_id, sec, min, hrs, day)
				{
					document.getElementById(display_id).innerText =
						CountdownText[0] + day + ' Tage und ' +
						(hrs < 10 ? '0'+hrs : hrs) + ':' +
						(min < 10 ? '0'+min : min) + ':' +
						(sec < 10 ? '0'+sec : sec) + CountdownText[1];

					sec -= 1;

					if(sec < 0)
					{
						sec = 59;
						min -= 1;

						if(min < 0)
						{
							min = 59;
							hrs -= 1;

							if(hrs < 0)
							{
								hrs = 23;
								day -= 1;
							}
						}
					}

					if(!(sec == 0 && min == 0 && hrs == 0 && day == 0))
						window.setTimeout('_Countdown(display_id, sec, min, hrs, day)', 1000);
					else
						document.getElementById(display_id).innerText = CountdownFinished;
				}

				function InitCountdown(display_id, seconds)
				{
					if(seconds > 0)
					{
						var sec = seconds % 60;
						var min = (seconds - sec) % 60;
						var hrs = (seconds - sec - (min * 60)) % 60;
						var day = (seconds - sec - (min * 60) - (hrs * 60 * 60)) % 24;

						_Countdown(display_id, sec, min, hrs, day);
					}
					else
					{
						document.getElementById(display_id).innerText = CountdownFinished;
					}
				}

				InitCountdown('time', 130);

			//-->
		</script>
	</head>
	<body xml:lang="en" lang="en">
		<span id="time"></span>
	</body>
</html>

Im FireFox erhalte ich den Fehler "document.getElementById(display_id) has no properties"

Ich verstehe nicht was ich falsch mache. Falls auch noch logische Fehler sind drin sind sagt sie mir bitte auch.
 
Naja....so ein Dokument wird von oben nach unten gelesen... da der Funktionsaufruf im Quelltext vor dem Element steht, ist es zu diesem Zeitpunkt noch nicht bekannt.
Positioniere den Aufruf hinter dem Element, und es sollte gehen.
 
Ich habe beide Möglichkeiten getestet. Es kommt zwar nicht mehr die alte Fehlermeldung dafür erhalte ich jetzt: display_id is not defines (im Firefox). In beiden varianten
 
In welcher Zeile des Codes kommt denn diese Fehlermeldung?
Schau doch mal, ob du die Vaiable auch wirklich definierst!
 
Zeile 40 aber dort nirgends display_id. Warum sollte ich die variable definieren? Sie dient doch ausschließlich als argument der funktion...
 
Das meinte ich mit definieren ;).

Ich habe mich jetzt auch mal hingesetzt und es genauer angeschaut. So klappt es:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title></title>
<script type="text/javascript">
<!--
const CountdownText = new Array('Es dauert noch ', ' bis sie den n&auml;chsten Sprung durchführen k&ouml;nnen.');
const CountdownFinished = 'Sie können nun springen!';

function _Countdown(display_id, sec, min, hrs, day)
{
document.getElementById(display_id).innerHTML =
CountdownText[0] + day + ' Tage und ' +
(hrs < 10 ? '0'+hrs : hrs) + ':' +
(min < 10 ? '0'+min : min) + ':' +
(sec < 10 ? '0'+sec : sec) + CountdownText[1];

sec -= 1;

if(sec < 0)
{
sec = 59;
min -= 1;

if(min < 0)
{
min = 59;
hrs -= 1;

if(hrs < 0)
{
hrs = 23;
day -= 1;
}
}
}
if(!(sec == 0 && min == 0 && hrs == 0 && day == 0)){
window.setTimeout('_Countdown("'+display_id+'", '+sec+', '+min+', '+hrs+', '+day+')', 1000);
}else{
document.getElementById(display_id).innerHTML = CountdownFinished;}
}

function InitCountdown(display_id, seconds)
{
if(seconds > 0)
{
var sec = seconds % 60;
var min = (seconds - sec) % 60;
var hrs = (seconds - sec - (min * 60)) % 60;
var day = (seconds - sec - (min * 60) - (hrs * 60 * 60)) % 24;

_Countdown(display_id, sec, min, hrs, day);
}
else
{
document.getElementById(display_id).innerHTML = CountdownFinished;
}
}



//-->
</script>
</head>
<body xml:lang="en" lang="en" onload="InitCountdown('time', 130);">
<span id="time"></span>
</body>
</html>

Ich habe zudem noch das innerTEXT durch innerHTML ersetzt, da es sonst nichts angeziegt hätte.
Der IE macht es aber dennoch nicht. Irgendein Syntaxfehler in Zeile 9. Kann aber nichts finden.
 
Ah jetzt verstehe ich! Danke! Jetzt klappts. Darauf hätte ich auch selber kommen können, wir sind hier ja schließlich nicht in PHP ^^
 

Neue Beiträge

Zurück