Webstatt.org - Community seit 2006 - 2012 (2024?)

Problem mit Countdown

user-140
14.11.2006 14:28

Also ich hab jetzt mal ne Frage:

Ich lern gerade JS und ich steh gerade an.
Also es ist ein ganz einfacher Countdown.
Jetzt zieh ich alle 0,1s die Zahl 0,1 ab.
Das funktioniert super.
Wenn ich aber jetzt eine 2 Aktion darauf packen will gehts nicht mehr.
Warum ist das so, ich kann nur eine Aktion ausführen, sind 2 drinne macht er zicken.

Hier das funktioniert nicht:

<script type="text/javascript">
function timer(){
document.all.text.innerHTML = document.all.text.innerHTML-0.1;
document.all.text.innerHTML = math.round(document.all.text.innerHTML);
window.setTimeout('timer()',100);
}


</script>
<body onload="timer();">
<span id="text">30</span>
</body>


Das hingegn funktioniert ohne Probleme
<script type="text/javascript">
function timer(){
document.all.text.innerHTML = document.all.text.innerHTML-0.1;
window.setTimeout('timer()',100);
}


</script>
<body onload="timer();">
<span id="text">30</span>
</body>

WOBEI das auch nicht so funktioniert wie ich das will,
den er subtrahiert falsch.
Statt z.B.: 29.9 steht irgendwas mit 29.99999999983

Warum macht er das schon wieder?
Kann mir da wer ein bissl weiterhelfen?

MFG

Avatar user-271
14.11.2006 15:00

das mit dem runden ist klar, warum das nicht funktioniert...stell dir mal vor, du ziehst von 30 0.1 ab

dann steht da: 29.9

wenn du nun auf ganze zahlen rundest, was math.round ja macht, dann rundet er auf 30 zwinkern d.h. du hast eine endlos schleife erzeugt

ausserdem: aufpassen: du hast einmal einen String und du willst es als integer verwenden ,) neee..du willst es eher als float und ausserdem verwende ich irgendwie lieber, getElementById
also sollte deine funktion so aussehen
<script type="text/javascript">
function timer(){
document.getElementById("text"zwinkern.innerHTML = parseFloat(document.getElementById("text"zwinkern.innerHTML)-0.1;
window.setTimeout('timer()',100);
}


</script>
<body onload="timer();">
<span id="text">30</span>
</body>


andere frage: was solle es denn machen?

#!/bin/bash
traurig){ neutral:& };:
Avatar user-182
14.11.2006 15:07

Auf http://up-lor-da.projekte.frankyonline.de/download.php?hash=1c718 hab ich das so gemacht:
<script type="text/javascript">
<!--
function kaufm(x) {
var k = (Math.round(x * 100) / 100).toString();
k += (k.indexOf('.'zwinkern == -1)? '.0' : '0';
var p = k.indexOf('.'zwinkern;
return k.substring(0, p) + '.' + k.substring(p+1, p+2);
}

function cd(seks){
if(seks >= 0.1){
seks = seks - 0.1;

if(document.getElementById('countdownlayer'zwinkern)
document.getElementById('countdownlayer'zwinkern.innerHTML = "Bitte "+kaufm(seks)+" Sekunden warten...";

if(document.getElementById('dlbutton'zwinkern){
document.getElementById('dlbutton'zwinkern.disabled = true;
}

window.setTimeout("cd("+seks+"zwinkern", 100);
}else{
document.getElementById('countdownlayer'zwinkern.innerHTML = "Download:";
document.getElementById('dlbutton'zwinkern.disabled = false;
}
}

onload = cd(20);
//-->
</script>

[..]

<h2 id="countdownlayer">Bitte 10 Sekunden warten...</h2>


bitte nächstes mal nen aussagekräftigen titel benutzen frech

Seid ihr auch schon wix'r? xD
user-140
14.11.2006 15:26

Ich probier ganz einfach ein bisschen herum,

ich hab aber jetzt nu das problem das er mir statt 29.9 irgendwas mit 29.9999999983 hinschreibt!

MFG

Avatar user-182
14.11.2006 15:29

Original von user-140
Ich probier ganz einfach ein bisschen herum,

ich hab aber jetzt nu das problem das er mir statt 29.9 irgendwas mit 29.9999999983 hinschreibt!

MFG


jap und deswegen benutz die erste funktion von meinem code zum runden frech das gleich prob hat ich auch erst..

Seid ihr auch schon wix'r? xD
user-140
14.11.2006 19:03

Original von user-182
Original von user-140
Ich probier ganz einfach ein bisschen herum,

ich hab aber jetzt nu das problem das er mir statt 29.9 irgendwas mit 29.9999999983 hinschreibt!

MFG


jap und deswegen benutz die erste funktion von meinem code zum runden frech das gleich prob hat ich auch erst..

Habs gefunden.
He das geht VIEL VIEL einfacher um die Nachkommastellen festzulegen.
Die gesuchte Funktion ist toFixed();
Hier der Snippet:
<script type="text/javascript">
function timer(){
var a = document.getElementById("text"zwinkern.innerHTML-0.1;
a = parseFloat(a.toFixed(1));
document.getElementById('text'zwinkern.innerHTML = a;
window.setTimeout('timer()',100);
}
</script>
<body onload="timer();">
<span id="text">30.0</span>
</body>

Avatar user-182
14.11.2006 19:10

ahh danke lächeln
aber wie kommts denn überhaupt zu dieser langen Dezimalzahl?

Seid ihr auch schon wix'r? xD
user-140
14.11.2006 19:58

Tja das Frag ich mich auch...
Also "menschlich" rechnet das JS sicher nicht Fettes Grinsen Fettes Grinsen

Aber auf jeden Fall gibt es ja ne Lösung dafür!
Hab mir jetzt nen guten JS Editor gesaugt, der hat endlich mal n geilen syntax highlighter dabei, und alle funktionen die JS bietet sind auch aufgelistet, dadurch hab ichs gefunden und mit selfhtml.org
Wer interesse hat
http://yaldex.com/JSFactory_Pro.htm

Is aber auf Englisch