Willkommen in der Webstatt Zum Webstatt Blog und Stories
brainnrg am 14.11.06 15: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

netcup.de Warum gibt es hier Werbung?
nuit nuit am 14.11.06 16: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 ;) 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").innerHTML = parseFloat(document.getElementById("text").innerHTML)-0.1;
window.setTimeout('timer()',100);
}


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


andere frage: was solle es denn machen?

Franky Franky am 14.11.06 16: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('.') == -1)? '.0' : '0';
var p = k.indexOf('.');
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'))
document.getElementById('countdownlayer').innerHTML = "Bitte "+kaufm(seks)+" Sekunden warten...";

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

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

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

[..]

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


bitte nächstes mal nen aussagekräftigen titel benutzen :P

brainnrg am 14.11.06 16: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

Franky Franky am 14.11.06 16:29

Quote
Original von brainnrg
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 :P das gleich prob hat ich auch erst..

brainnrg am 14.11.06 20:03

Quote
Original von Franky
[quote]Original von brainnrg
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 :P das gleich prob hat ich auch erst..[/quote]
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").innerHTML-0.1;
a = parseFloat(a.toFixed(1));
document.getElementById('text').innerHTML = a;
window.setTimeout('timer()',100);
}
</script>
<body onload="timer();">
<span id="text">30.0</span>
</body>

Franky Franky am 14.11.06 20:10

ahh danke :)
aber wie kommts denn überhaupt zu dieser langen Dezimalzahl?

brainnrg am 14.11.06 20:58

Tja das Frag ich mich auch...
Also "menschlich" rechnet das JS sicher nicht :D :D

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

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt