• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

toFixed(2) läuft nur unter Firefox

Fragezeichen

Neues Mitglied
Hallo, bin neu hier, hab auch schon die Sufu genutzt und komme aber leider auch trotz intensiver Google-Suche nicht weiter.
Ich habe in html ein Formular angelegt:
Code:
<form name="frm1">
<input type="number" name="q1"  id="q1" onChange="CalValue1();">
<input type="number" name="result1" readonly>
<input type="reset" name="reset" id="reset" value="Reset">
</form>

Ich möchte die eingegebene Variable ("q1", Dezimalzahl) mit 5 multiplizieren. Das Ergebnis (result1) soll schließlich auf zwei Dezimalstellen gerundet und mit Komma statt Punkt ausgegeben werden:
Code:
<script type="text/javascript">
function CalValue1()
{var q1 = parseFloat(frm1.q1.value);

    var result1 = q1 * 5;

    var two1 = result1.toFixed(2);
    
    var value1 = two1.replace(".", ",");
    frm1.result1.value=value1;
     if(frm1.result1.value=="NaN")
    {frm1.result1.value="???";} }
</script>

Mein Code funktioniert auch unter Firefox, alle anderen Browser (Safari, Chrome, IE) verweigern mir aber die Berechnung. Wenn ich bei toFixed() die Klammer leer lasse, dann funktioniert´s auch mit allen Browsern. Was muß ich an meinem Code verbessern, um das Runden für alle Browser verständlich zu machen? Irgendwo scheint sich bei mir ein Denkfehler eingeschlichen zu haben:oops:.

Gesamtansicht zum Ausprobieren:
Code:
<html>

<script type="text/javascript">
function CalValue1()
{var q1 = parseFloat(frm1.q1.value);

    var result1 = q1 * 5;

    var two1 = result1.toFixed(2);
    
    var value1 = two1.replace(".", ",");
    frm1.result1.value=value1;
     if(frm1.result1.value=="NaN")
    {frm1.result1.value="???";} }
</script>

<form name="frm1">
<input type="number" name="q1"  id="q1" onChange="CalValue1();">
<input type="number" name="result1" readonly>
<input type="reset" name="reset" id="reset" value="Reset">
</form>

</html>
 
Werbung:
Gibt es denn einen JavaScript-Fehler?

Hast Du schonmal versucht mit alert() an einigen Stellen die jeweils aktuellen Werte auszugeben um zu erkennen, bis wohin der jeweilige Browser mit welchem Wert kommt?
 
Mit 100 multiplizieren, in Integer verwandeln (parseInt()), durch 100 teilen? Sowas? Nicht elegant, aber browserunabhängig und halbwegs korrekt im Ergebnis? - Nur so ne Idee ...
 
Werbung:
Hast Du schonmal versucht mit alert() an einigen Stellen die jeweils aktuellen Werte auszugeben um zu erkennen, bis wohin der jeweilige Browser mit welchem Wert kommt?

Super. threadi und Danke für die Idee!
Danke auch an bodil!

Außer bei Firefox kommt mein Code nur bis zur Variable "Value1". Mit alert(value1) bekomme ich bei allen getesten Browsern das korrekte Ergebnis mit Komma. Die Übergabe der Variablen in frm1.result1.value=value1 scheint aber dann nicht mehr zu funktionieren.
Wenn ich allerdings var value1 = two1.replace(".", ",") rausnehme dann funktioniert die Übergabe wieder.
Also entweder keine Dezimalstellen oder ein Punkt statt Komma. :sad: Das kann doch nicht sein? Vielleicht weil result1 nach dem replacement von Punkt durch Komma nicht mehr als Zahl sondern Text interpretiert wird?
Habt Ihr vielleicht weitere Vorschläge?

Code:
<!DOCTYPE html>

<html>

<head>
</head>


<body>

<script>
function CalValue1()
{var q1 = parseFloat(frm1.q1.value);

    var result1 = q1 * 5;

    var two1 = result1.toFixed(2);

    var value1 = two1.replace(".", ",");

    frm1.result1.value=value1;

alert(value1)

     if(frm1.result1.value=="NaN")
    {frm1.result1.value="???";} 
}
</script>

<form name="frm1">
<input type="number" name="q1"  id="q1" onChange="CalValue1();">
<input type="number" name="result1" readonly>
<input type="reset" name="reset" id="reset" value="Reset">
</form>


</body>
</html>


EDIT: wenn ich in der Ausgabe jetzt <input type="text" name="result1" readonly> schreibe, bekomme ich auch bei allen Browsern ein Ergebnis. Nur "reset" funktioniert allein bei firefox........mmmmmm......Grübel
 
Zuletzt bearbeitet:
Es ist doch zum verzweifeln.
Sowohl dieser Trick:
Code:
function CalValue1()
{var q1 = parseFloat(frm1.q1.[COLOR=#ff0000]value.replace(',', '.')[/COLOR]);

    var result1 = q1 * 5;

    var two1 = result1.toFixed(2);


    var value1 = two1.replace(".", ",");

    frm1.result1.value=value1;

     if(frm1.result1.value=="NaN")
    {frm1.result1.value="???";} 
}

als auch jener:
Code:
function CalValue1()
{var q1 = frm1.q1.value;

[COLOR=#ff0000]if (q1.indexOf(",") > -1) { q1 = q1.replace(",","."); }[/COLOR]

    var result1 = q1 * 5;

    var two1 = result1.toFixed(2);

    var value1 = two1.replace(".", ",");

    frm1.result1.value=value1;

     if(frm1.result1.value=="NaN")
    {frm1.result1.value="???";} 
}

funktioniert unter firefox, die anderen Browser weigern sich mal wieder.......:evil:
 
Werbung:
So lieber Moderator, Du kannst jetzt hier zu machen, denn ich hab mein Ergebnis. Auch bei der Eingabe in html muß der input typ "text" sein:

<input type="text" name="q1" id="q1" onChange="CalValue1();"

Danke nochmals für den alert-Tip!!!


Nachtrag: unter IE scheint auch das nicht zu funktionieren....:-(, Chrome, Safari und Firefox sind glücklich.
 
Zuletzt bearbeitet:
Hier wird nichts zugemacht. :p

Übrigens denke ich, dass auch eine Ursache vlt. die replace()-Funktion sein könnte. Die schreibt man nicht so

Code:
replace(",", ".");

sondern so:

Code:
replace(/,/, ".");

Siehe: SELFHTML: JavaScript / Objektreferenz / String

Der Verzicht auf HTML5-Felder kann ich mir insbesondere bei Chrome nur schwer als Lösung vorstellen.
 
Hier wird nichts zugemacht. :p

Übrigens denke ich, dass auch eine Ursache vlt. die replace()-Funktion sein könnte. Die schreibt man nicht so

Code:
replace(",", ".");

sondern so:

Code:
replace(/,/, ".");

Siehe: SELFHTML: JavaScript / Objektreferenz / String

Der Verzicht auf HTML5-Felder kann ich mir insbesondere bei Chrome nur schwer als Lösung vorstellen.

Meine replace-Schreibweise funzt aber auch.
Und kannst Du das mit html5-Feldern bitte genauer ausführen?
 
Werbung:
Da Chrome wie auch Firefox HTML5-Elemente wie input-number kennen, sollte dieser Feldtyp eigentlich nicht die Ursache sein wenn Chrome etwas nicht macht, aber Firefox schon. Beim IE würde ich es voll verstehen - der kennt diese Feldtypen nicht.
 
Zurück
Oben