Flori: Anzahl Zeichen aus Textfeldern ermitteln

Hallo,

ich möchte gerne per Javascript aus zwei (bzw. mehreren) Textfeldern die Gesamtzahl der eingegebenen Zeichen errechnen lassen. Der Rückgabewert meiner Variablen "gesamt" ist aber immer NaN. Kann mich einer auf die richtige Fährte setzen ?

Grüße und Dank vorab von Flori

<html>
<head>
<title>test</title>

<script type="text/javascript">
<!--

function ermittle_anzahl()
{

var textfeld = document.formular.getElementsByTagName('input');

var i = 0;

while (i < textfeld.length)
{
gesamt += textfeld[i].value.length;
i++;
}
alert(gesamt)
}

//-->
</script>

</head>
<body>

<form name="formular">
<input type="text" size="50" value="">
<input type="text" size="50" value="">
</form>

<a href="javascript:ermittle_anzahl()">Anzahl</a>

</body>
</html>

  1. <script type="text/javascript">
    <!--

    function ermittle_anzahl()
    {

    var textfeld = document.formular.getElementsByTagName('input');

    Du ermittelst hier alle input felder in deinem Dokument.

    var i = 0;

    while (i < textfeld.length)
    {
    gesamt += textfeld[i].value.length;

    Und du bist sicher, dass alle eine Eigenschaft length haben?
    Lass dir diese mal ausgeben: alert( textfeld[i].value.length );

    Struppi.

    1. var textfeld = document.formular.getElementsByTagName('input');

      Du ermittelst hier alle input felder in deinem Dokument.

      Hallo Struppi,

      Ja, zwei ... oder ... ich hab doch nur 2 inputs ?!

      var i = 0;

      while (i < textfeld.length)
      {
      gesamt += textfeld[i].value.length;

      Und du bist sicher, dass alle eine Eigenschaft length haben?
      Lass dir diese mal ausgeben: alert( textfeld[i].value.length );

      Gebe ich nin das eine Feld 3 Zeichen und in das andere Feld 2 Zeichen ein, bekomme ich als Antwort auf alert(textfeld[i].value.length)
      3 und 2 ......... :-|

      Bin wohl noch nicht auf der Spur ....... ?!

      1. Hallo,

        versuch mal am Anfang deiner Funktion gesamt erstmal zu initialisieren mit gesamt = 0;.

        Dadurch du es vorher nicht initialisierst, weiss JavaScript ja nicht, was vorher drin stand und geht vermutlich erstmal von einem String aus.

        Deine Funktion müsste also so das richtige ausgeben:
        function ermittle_anzahl()
        {
        var textfeld = document.formular.getElementsByTagName('input');

        var i = 0;
        gesamt=0;
        while (i < textfeld.length)
        {
        gesamt += textfeld[i].value.length;
        i++;
        }
        alert(gesamt)
        }

        MfG,
          Juan

        1. Hy Juan,

          nachdem ich der falschen Spur hinterher bin, habe ich die Lösung selbst gefunden. += heisst ja: Linker Wert wird mit dem rechten Wert addiert und dem linken Wert zugeschrieben. Also muss die Variable "gesamt" auch eine Zahl sein. Ich Dummbax ich.

          Also herzlichen Dank für die Mühe. Hier das erweiterte Script:
          vor jeder Zeile steht jetzt die Anzahl der Zeichen der betreffenden Zeile - anschliessend werden die Zeichen aller Zeilen zusammengezählt.

          Herzliche Grüße von Flori

          -------------------------------------------

          <html>
          <head>
          <title>test</title>

          <script type="text/javascript">
          <!--

          function ermittle_anzahl()
          {

          var textfeld = document.getElementsByTagName('input');

          var anzahl = document.getElementsByTagName('span');

          var i = 0;

          var gesamt = 0;

          while (i < textfeld.length)
          {

          anzahl[i].innerHTML = textfeld[i].value.length;

          gesamt += textfeld[i].value.length;

          document.getElementById('gesamt').innerHTML = gesamt;

          i++;

          }

          }

          //-->
          </script>

          </head>
          <body>

          <form name="formular">

          <input type="text" size="50" value=""> <span>0</span><br>
          <input type="text" size="50" value=""> <span>0</span><br>
          <input type="text" size="50" value=""> <span>0</span><br>
          <input type="text" size="50" value=""> <span>0</span>

          <div id="gesamt">0</div>

          </form>

          <a href="javascript:ermittle_anzahl()">Anzahl</a>

          </body>
          </html>

        2. Tag Juan.

          versuch mal am Anfang deiner Funktion gesamt erstmal zu initialisieren mit gesamt = 0;.

          Ja, genauso ist es. Es reicht übrigens auch Folgendes:

          var gesamt = new Number();

          Dadurch du es vorher nicht initialisierst, weiss JavaScript ja nicht, was vorher drin stand und geht vermutlich erstmal von einem String aus.

          Nicht ganz. Der Typ der Variable "gesamt" ist schon "Number", allerdings verhält sich Javascript völlig standardkonform. Ein Ausdruck der Art Variable += anzuhaengender_Inhalt wird dergestalt ausgewertet, dass zunächst GetValue für Variable und anzuhängenden Inhalt ausgeführt wird, danach werden die Werte addiert (siehe Compound Assignment). Da "gesamt" beim ersten Aufruf nicht definiert ist, ergibt GetValue "NaN". Tja, und wenn eine Seite NaN ist, ergibt eine Addition auch immer NaN (siehe Applying the Additive Operators to Numbers). Dass die Variable vom Typ "Number" ist, ist ebenfalls völlig korrekt, siehe NaN.

          Siechfred

      2. Hi there,

        Bin wohl noch nicht auf der Spur ....... ?!

        Hast Du vielleicht einen Button dabei ?