wh!te: Internet Explorer: Object Expected, keine Ausgabe

Hallo,

ich habe ja schon ein paar mal hier Fragen zu Javscript und zu meinem Countdown-Timer gestellt. Jetzt habe ich folgendes Problem: In allen Browsern funktioniert mein Script ausgezeichnet, alle Countdowns laufen wie geplant. Nur im Internet Explorer erfolgt garkeine Ausgabe und es wird der Fehler
"Object Expected" für Zeile 10 ausgegeben. In Zeile 10 steht der <body>-Tag mit folgendem Inhalt:

<body onload="lade()">

In der function lade() steht folgendes:

function lade() {  
	differenz();  
	ausgabeZielDatum(ziel);  
	}

die function differenz ist der eigentliche Countdown, die zweite function ist zur Ausgabe des Zieldatums in ein Feld. Wie gesagt, der Internet Explorer gibt nur den Fehler aus. Ich habe auch schon probiert, in den "onload" Teil eine andere Funktion zu setzen (ich hatte vorher nur "differenz" drin, da hats noch funktioniert), aber auch damit passiert nichts.

Wäre echt nett, wenn mir da jemand helfen könnte! Bei Fragen stehe ich gerne zur Verfügung.

Danke!

Ich schreib hier nochmal kurz die wichtigsten Funktionen rein:

	var ziel = findnextBday(11, 24);  
	var minuten = 0;  
	var sekunden = 0;  
	var stunden = 0;  
	var tage = 0;  
	var monate = 0;  
	var monat;  
	var tag;  
	var ereignis = "Weihnachten.";  
	  
	function findnextBday(month, day) {  
		var jahr = 2007;  
		var aktuell = new Date();  
		var aktuellTime = aktuell.getTime();  
		var datum = new Date(jahr, month, day);  
		var unterschied = datum - aktuellTime;  
		while (unterschied < 0) {  
				jahr = jahr + 1;  
				datum = new Date(jahr, month, day);  
				unterschied = datum - aktuellTime;  
			}				  
		ziel = new Date(jahr, month, day);  
		return ziel;  
	}  
	  
	function aendereTimer(name) {  
		if (name == "geburtstag") {  
			monat = 3;  
			tag = 7;  
			ziel = findnextBday(monat, tag);  
			ereignis = "xyz Geburtstag hat."  
		}  
  
               //hier stehen noch ein paar daten nach dem gleichen Muster wie  
  
//jetzt folgt die Möglichkeit aus einem eigenen Datum einen Countdown zu machen  
		else if (name == "eigen") {  
			var eingabeMonat = document.eingabe.monat.value - 1;  
			while (eingabeMonat > 11 || eingabeMonat < 0) {  
				eingabeMonat = prompt("Der Monat muss einen Wert von 1 bis 12 haben!", "Bitte hier einen gültigen Wert eingeben!");  
			}  
			var eingabeTag = document.eingabe.tag.value;  
			while (eingabeTag > 31 || eingabeTag < 0) {  
				eingabeTag = prompt("Der Tag muss einen Wert von 1 bis 31 haben!", "Bitte hier einen gültigen Wert eingeben!");  
			}  
			var eingabeJahr = document.eingabe.jahr.value;  
			var eingabeStunde = document.eingabe.stunde.value;  
			while (eingabeStunde > 24 || eingabeStunde < 0) {  
				eingabeStunde = prompt("Der Stundenwert muss im Bereich von 0 bis 24 liegen!", "Bitte hier einen gültigen Wert eingeben!");  
			}  
			var eingabeMinute = document.eingabe.minute.value;  
			while (eingabeMinute > 59 || eingabeMinute < 0) {  
				eingabeMinute = prompt("Der Minutenwert muss zwischen 0 bis 59 liegen!", "Bitte hier einen gültigen Wert eingeben!");  
			}  
			var eingabeSekunde = document.eingabe.sekunde.value;  
			while (eingabeSekunde > 59 || eingabeSekunde < 0) {  
				eingabeSekunde = prompt("Der Sekundenwert muss zwischen 0 und 59 liegen!", "Bitte hier einen gültigen Wert eingeben!");  
			}  
			if (eingabeStunde != "" && eingabeMinute != "" && eingabeSekunde != "" && eingabeJahr != "") {  
				ziel = new Date(eingabeJahr, eingabeMonat, eingabeTag, eingabeStunde, eingabeMinute, eingabeSekunde);  
			}  
			else if (eingabeJahr == "" && eingabeTag != "" && eingabeMonat != "") {  
				ziel = findnextBday(eingabeMonat, eingabeTag);  
			}  
			else {  
			ziel = new Date(eingabeJahr, eingabeMonat, eingabeTag);  
			}  
			ereignis = "der gewählte Zeitpunkt erreicht wird.";  
			return false;  
		}  
	}  
	  
	function ausgabeZielDatum(x) {  
		var gesuchterTag = x.getDate();  
		if (gesuchterTag < 10) {  
			gesuchterTag = "0" + gesuchterTag;  
		}  
		var gesuchterMonat = x.getMonth() + 1;  
		if (gesuchterMonat < 10) {  
			gesuchterMonat = "0" + gesuchterMonat;  
		}  
		var gesuchtesJahr = x.getFullYear();  
		document.eingabe.jahr.value = gesuchtesJahr;  
		document.eingabe.monat.value = gesuchterMonat;  
		document.eingabe.tag.value = gesuchterTag;  
		document.eingabe.stunde.value = "";  
		document.eingabe.sekunde.value = "";  
		document.eingabe.minute.value = "";  
  
	}	  
	  
  
        //Das ist jetzt die eigentliche Countdown Funktion  
	function differenz() {	  
		var aktuell = new Date();  
		var startTime = ziel.getTime();  
		var aktuellTime = aktuell.getTime();  
		var diff = startTime - aktuellTime ;  
		if (diff >= 0) {  
		sekunden = Math.floor((diff/1000));  
		while (sekunden >= 60){  
			sekunden = sekunden - 60;  
		}  
		if (sekunden < 10) {  
			sekunden = "0" + sekunden;  
		}  
		minuten = Math.floor((diff/(1000*60)));  
		while (minuten >= 60){  
			minuten = minuten - 60;  
		}  
		if (minuten < 10) {  
			minuten = "0" + minuten;  
		}  
		stunden = Math.floor((diff/(1000*60*60)));  
		while (stunden >= 24){  
			stunden = stunden - 24;  
		}  
		tage = Math.floor((diff/(1000*60*60*24)));  
		while (tage >= 30){  
			tage = tage - 30;  
		}  
		monate = Math.floor((diff/(1000*60*60*24*30)));  
		  
	document.getElementById('ausgabebereich').innerHTML = "Noch " + monate + bezmonate + tage + beztage + stunden + bezstunden + minuten + bezminuten + sekunden + bezsekunden + " bis " + ereignis;	  
	}  
  
//das ganze mit bezmonate etc wird vorher belegt, habe ich wegen der übersichtlichkeit weggelassen  
  
	else {  
	document.getElementById('ausgabebereich').innerHTML = "Vorbei!";  
	}  
setTimeout("differenz()", 100);  
	}	  
</script>  

Das ist erstmal das wichtigste aus dem Javascript Teil

Jetzt gibt es noch folgende HTML Elemente:

<p class="ausgabe" id="ausgabebereich">text</p> <!--Ausgabebereich für den Countdown-->  
<table border="1" cellspacing="0" cellpadding="5">  
  <caption>  
    Mögliche Ereignisse  
  </caption>  
  <tr>  
    <th scope="col">Geburtstage</th>  
    <th scope="col">Ferien</th>  
    <th scope="col">Sonstiges</th>  
  </tr>  
  <tr>  
    <td><a href='javascript:aendereTimer("xyz")'>xyz</a></td>  
    <td><a href="javascript:aendereTimer('herbstferien')">Herbstferien</a></td>  
    <td><a href="javascript:aendereTimer('besuch')">Besuch</a></td>  
  </tr>  
  <!--Ein paar weitere Tabellenzeilen mit anderen Daten-->  
</table>  
  
<h2>Eigenes Datum verwenden:</h2>  
<form action="#" method="get" name="eingabe">  
Datum (Tag . Monat . Jahr): <input type="text" name="tag" size="2" /> . <input type="text" name="monat" size="2" /> . <input type="text" name="jahr" size="4" /> <i> Jahr frei lassen für jährliche Ereignisse</i><br />  
Uhrzeit &nbsp;&nbsp;&nbsp;&nbsp;(Std : Min : Sek): <input type="text" name="stunde" size="2" />&nbsp;&nbsp;:&nbsp;&nbsp;<input type="text" name="minute" size="2" />&nbsp;&nbsp;:&nbsp;&nbsp;<input type="text" name="sekunde" size="2" /> <i> Funktioniert nur mit Angabe des Jahres</i><br />  
<input type="submit" onClick="return aendereTimer('eigen')" value="Eigenes Datum verwenden" />  
</form>
  1. Hallo!

    Wirklich hilfreich ist bei solchen Problemen nur eine Seite zum Testen. Der IE macht diverse Tricks, um das Anzeigen der Seite zu beschleunigen. Dazu gehört teilweise auch, Elemente asynchron zu bearbeiten - dadurch kann es in Deinem Fall dazu kommen, dass "lade" ausgeführt wird, bevor die darin benötigten Objekte fertig geladen sind.

    Gruß, LX

    --
    RFC 1925, Satz 8: Es ist komplizierter als man denkt.
    1. Hallo!

      Wirklich hilfreich ist bei solchen Problemen nur eine Seite zum Testen. Der IE macht diverse Tricks, um das Anzeigen der Seite zu beschleunigen. Dazu gehört teilweise auch, Elemente asynchron zu bearbeiten - dadurch kann es in Deinem Fall dazu kommen, dass "lade" ausgeführt wird, bevor die darin benötigten Objekte fertig geladen sind.

      Gruß, LX

      ok, danke für die schnelle Antwort! Wie kann ich das mit dem syncronen laden verhindern? Ich geb euch mal nen link zu der seite, dann könnt ihr euch da ja selbst mal ein Bild von machen: Hier ist er :)

      1. [latex]Mae  govannen![/latex]

        ok, danke für die schnelle Antwort! Wie kann ich das mit dem syncronen laden verhindern? Ich geb euch mal nen link zu der seite, dann könnt ihr euch da ja selbst mal ein Bild von machen: Hier ist er :)

        Der Microsoft Script-Debugger meldet mir einen Fehler bei der Ausgabe von differenz() in der Funktion lade(), warum auch immer. Möglich wäre z.B. daß das document.write zu einem Zeipunkt kommt, zu dem bereits das darüber stehende eingelesen worden ist. Alles, was darunter steht, wird dann gelöscht, der Browser denkt, "Hey, ich bin fertig" und ruft die Funktion lade() auf, aber die dort auszuführende Funktion differenz() gibt es dann nicht.

        Ich würde dir raten, das gesamte Javascript in _einem_ script-Block unterzubringen (Noch besser wäre eine externe Datei). statt document.write nutze innerHTML oder die DOM-Methoden

        Cü,

        Kai

        --
        Hard to believe that anyone would use Prototype.js at this
        point. It was a bad idea in 2006 and it hasn't gotten any better with age. (David Mark)
        Foren-Stylesheet Site Selfzeugs
        SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
        1. Ich würde dir raten, das gesamte Javascript in _einem_ script-Block unterzubringen (Noch besser wäre eine externe Datei). statt document.write nutze innerHTML oder die DOM-Methoden

          Cü,

          Kai

          danke, funzt echt super jetzt! Habs in eine externe datei gepackt und alles in ein script! Danke!!!