Countwodn funktioniert nicht
steffen
- javascript
Hi Forumleser,
möchte ein stinknormalen Countdown machen mit einer anzeige.
<html><head><title>Test</title></head><body>
<script type="text/javascript">
var zahl=120;
function countdown(){
document.write(zahl);
zahl--;
if(zahl!=0)
{
window.setTimeout("countdown();",1000);
}
}
countdown();
</script>
</body></html>
Er macht 120, 119 und bleibt stehen...
wo liegt mein denkfehler?
danke für eure Hilfe
Hallo,
wo liegt mein denkfehler?
Also ich muss zugeben ich komme jetzt irgendwie auch nicht drauf warum das passieren sollte. Ich habe das mal so nachgebaut wie ich es machen würde und so funktioniert es auch, vielleicht hilft es dir weiter:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
[code lang=javascript]function countdown(i, element, timeout) {
var zahl = document.createTextNode(" " + i);
document.getElementById(element).appendChild(zahl);
i--;
if(i>0) window.setTimeout("countdown(" + i + ", '" + element + "', " + timeout + ");", 1000);
}
</script>
</head>
<body onload="countdown(120, 'countdown', 1000)">
<p id="countdown"></p>
</body>
</html>[/code]
Grüße
Jeena Paradies
Hallo,
if(i>0) window.setTimeout("countdown(" + i + ", '" + element + "', " + timeout + ");", 1000);
Ähm sorry, das hätte natürlich heißen müssen:
if(i>0) window.setTimeout("countdown(" + i + ", '" + element + "', " + timeout + ");", timeout);
Grüße
Jeena Paradies
Hi Jeena,
bei dir passiert es nun, dass die alte Zahl stehen bleibt und die neue dahintersteht.
mfg
Hallo steffen.
bei dir passiert es nun, dass die alte Zahl stehen bleibt und die neue dahintersteht.
Dann schau dir einmal die von Jeena genutzten Methoden an und was sie bewirken. (Siehe hierzu das http://de.selfhtml.org/javascript/objekte/node.htm@title=node-Objekt.)
Dadurch kannst du sein Skript eventuell auch in dieser Hinsicht ausbessern.
Einen schönen Samstag noch.
Gruß, Ashura
Hi Ashura,
nehme mal an, dass ich das mit deleteData() lösen muss oder?
Gibt es keine andere möglichkeit?
hab das mal gesehen, dass das wer mit:
x = document.all[target];
x.innerHTML = text;
gemacht hat, aber das klappt auch nicht :-/
mfg steffen
Hallo steffen.
nehme mal an, dass ich das mit deleteData() lösen muss oder?
So umständlich würde ich mir das Ganze gar nicht machen.
Ich würde in das p-Element mit der ID „countdown“ ein Leerzeichen setzen (→ damit existiert automatisch ein Textknoten und man erspart sich das Erstellen des selbigen).
Nun kannst du mit Jeenas Script auf dieses p-Element zugreifen und den http://de.selfhtml.org/javascript/objekte/node.htm#node_value@title=nodeValue des <http://de.selfhtml.org/javascript/objekte/node.htm#first_child@title=ersten Kindes> (des Textknotens) modifizieren.
Gibt es keine andere möglichkeit?
hab das mal gesehen, dass das wer mit:
x = document.all[target];
x.innerHTML = text;gemacht hat, aber das klappt auch nicht :-/
Du weißt, dass „klappt nicht“ den selben Aussagewert wie „Husseldiguggeldu“ hat?
Gegen http://de.selfhtml.org/javascript/objekte/all.htm#inner_html@title=innerHTML ist nichts einzuwenden, doch http://de.selfhtml.org/javascript/objekte/all.htm@title=document.all sollte ebenso wenig wie document.layers verwendet werden.
Da ich mich aber nie mit document.all befasst habe, kann ich nicht sagen, ob die Referenzierung über die ausführliche Objekt-Schreibweise (foo["bar"]) hier möglich ist und damit Zugriff auf Elemente gestattet.
Wenn dies möglich sein sollte, musst du natürlich auch einen Wert für die Variable „target“ übergeben.
Einen schönen Samstag noch.
Gruß, Ashura
Hi Ashura,
danke für deine Hilfe :)
Jetzt hab ich noch eine Frage: Du sagst document.all soll ich, genauso wie document.layer nicht verwenden.
Dein Link zeigt aber nur Beispiele wo document.all genutzt wird. Würde mich mal interessieren, wieso das nich genutzt werden soll.
mfg
Hallo steffen.
Dein Link zeigt aber nur Beispiele wo document.all genutzt wird.
Nein, du meinst sicher innerHTML.
Ja, dies stammt ursprünglich von Microsoft und wird in SELFHTML leider nur in Verbindung mit document.all präsentiert, auch wenn es ebenso gut mit anderen Zugriffsmethoden nutzbar ist.
Würde mich mal interessieren, wieso das nich genutzt werden soll.
Im Gegensatz zu innerHTML, was die Arbeit unter Umständen enorm vereinfachen kann, bietet document.all keinen Vorteil gegenüber den handelsüblichen DOM-Methoden. Letztere vermögen sogar viel mehr zu bieten, sofern man sich ein wenig damit befasst.
Ich persönlich lehne die Nutzung von document.all ab, weil es ebenso wie document.layers gänzlich in Eigenregie entworfen wurde und die Unterstützung hierfür in Zukunft nicht gewährleistet werden kann.
Die DOM-Methoden hingegen sind standardisiert und erhöhen damit die Wahrscheinlichkeit, dass sie auch in vielen Jahren noch von den Clients verstanden und umgesetzt werden können.
Allzu oft ist man zwar nicht gezwungen, seine Skripte neu zu schreiben, weil man veraltete Methoden genutzt hat, aber wozu einen späteren Extraaufwand schaffen, wenn man es gleich besser™ machen kann?
Einen schönen Samstag noch.
Gruß, Ashura
Hallo,
bei dir passiert es nun, dass die alte Zahl stehen bleibt und die neue dahintersteht.
Ja, ich dachte das wäre so gewollt?!
Grüße
Jeena Paradies
Hi,
Hallo,
wo liegt mein denkfehler?
Also ich muss zugeben ich komme jetzt irgendwie auch nicht drauf warum das passieren sollte.
Beim ersten Aufruf von countdown() wird die Seite gerade noch aufgebaut, also schreibt document.write() in das Dokument. Danach wird sie abgeschlossen (</body></html>) und deswegen überschreibt der erneute Aufruf von document.write() das Dokument. Dann ist die Funktion weg und window.setTimeout() versucht eine Funktion aufzurufen, welche es nicht mehr gibt.
Grüße,
Ronny
Hallo,
Beim ersten Aufruf von countdown() wird die Seite gerade noch aufgebaut, also schreibt document.write() in das Dokument. Danach wird sie abgeschlossen (</body></html>) und deswegen überschreibt der erneute Aufruf von document.write() das Dokument. Dann ist die Funktion weg und window.setTimeout() versucht eine Funktion aufzurufen, welche es nicht mehr gibt.
Aah raffiniert.
Grüße
Jeena Paradies