Steffen: Addition zweier Werte, aber nicht als Strings aneinanderhängen

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

  1. Humm, geht
    sum += parseInt(x.value); ?

    1. Humm, geht
      sum += parseInt(x.value); ?

      Leider nicht: NaN.
      ???
      Gruß

      Steffen

      1. 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!

        1. 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

          1. 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

            1. 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

  2. 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