Addition zweier Werte, aber nicht als Strings aneinanderhängen
Steffen
- javascript
0 Markus Grunk0 Steffen0 markus Grunk0 :-( Steffen0 Carsten
0 Thomas Meinike
Hallo.
Ich habe bisher nur etwas Erfahrung in Perl und c++ und stolpere jetzt in javaScript über ein sicherlich einfaches Problem (ist mir richtig peinlich).
Ich möchte die Inhalte von meheren Formularfeldern (name="f1" ... "f10") zusammen addieren.
function calc()
{
var i;
var sum = 0;
for (i = 1; i < 11; i++)
{
var x = eval("document.form1.f" + i);
sum += x.value;
}
alert(sum);
}
So werden die Werte aber nicht addiert sondern aneinander gehängt.
Also nicht 1+2+3=6 sondern 1+2+3=123.
Was mach ich denn hier falsch?
Gruß
Steffen
Humm, geht
sum += parseInt(x.value); ?
Humm, geht
sum += parseInt(x.value); ?
Leider nicht: NaN.
???
Gruß
Steffen
Aber so geht dem :
function calc()
{
var i;
var sum = 0;
for (i = 1; i < 11; i++)
{
var x = eval("document.forms1.f" + i);
sum += parseInt(x);
}
alert(sum);
}
Hab dein "x.value" net gesehen, lass dem ".value" weg, weisst du!
Aber so geht dem :
function calc()
{
var i;
var sum = 0;
for (i = 1; i < 11; i++)
{
var x = eval("document.forms1.f" + i);
sum += parseInt(x);
}
alert(sum);
}
Hab dein "x.value" net gesehen, lass dem ".value" weg, weisst du!
Immer noch NaN.
Warum betrachtet JS mein x.value eigentlich als String und nicht als numerischen Wert?
Gruß
Steffen
Hallo Steffen!
Hab dein "x.value" net gesehen, lass dem ".value" weg, weisst du!
Das ist falsch document.forms1.fxx hat den Typ 'Object' (das ist das ganz Formularelement) und lässt sich nicht sinnvoll in einen numerischen Wert umwandeln.
Immer noch NaN.
Kein Wunder.
Aber vorher wars richtig, da ist dann was anderes falsch.
(hast du z.b. nicht alle Felder ausgefüllt?)
Falls du solche Fehler (ebenso wie in ein Formularfeld eingetragenes nichtnumerisches Zeichen) abfangen willst:
var n=parseInt(x); /* Formulareingabe in Zahl umwandlen */
if(isNaN(n)==false) /* gültige Zahl erhalten? */
sum += n; /* ja: dann aufaddieren */
else /* nein: Fehlermeldung: */
alert("im Formluarfeld f"+i+" wurde "+x+" eingegeben. Das ist keine gültige Zahl.");
(statt sum += parseInt(x); )
Warum betrachtet JS mein x.value eigentlich als String und nicht als numerischen Wert?
Weil in einem Formularfeld immer Strings eingegeben werden.
Gruss,
Carsten
Hallo Carsten
(hast du z.b. nicht alle Felder ausgefüllt?)
Nein.
Falls du solche Fehler (ebenso wie in ein Formularfeld eingetragenes nichtnumerisches Zeichen) abfangen willst:
var n=parseInt(x); /* Formulareingabe in Zahl umwandlen */
if(isNaN(n)==false) /* gültige Zahl erhalten? */
sum += n; /* ja: dann aufaddieren */
else /* nein: Fehlermeldung: */
alert("im Formluarfeld f"+i+" wurde "+x+" eingegeben. Das ist keine gültige Zahl.");
So gehts.
Warum betrachtet JS mein x.value eigentlich als String und nicht als numerischen Wert?
Weil in einem Formularfeld immer Strings eingegeben werden.
Aha.
Gruss,
Steffen
Hallo Steffen,
var x = eval("document.form1.f" + i);
Was mach ich denn hier falsch?
Warum denn hier eval() wenn es mit
sum+=parseInt(document.form1.elements["f"+i].value);
auch moeglich sein sollte?
MfG, Thomas