Rolf B: Schleife in einer Javascript funktion

Beitrag lesen

Hallo Franz,

document.formular1.FeldWert+i

So kann's nicht gehen. Aber warum? Dafür muss man etwas tiefer in die Regeln von JavaScript einsteigen. Versuche bitte zu folgen - sowas muss man exakt verstanden haben. Ohne dieses Verständnis drohen ständige Überraschungen.

Dieser Ausdruck besteht aus 3 Operatoren (Punkt, Punkt, Plus) und 4 Operanden (Variablenname document, Eigenschaftsname formular1, Eigenschaftsname FeldWert und Variablenname i). JavaScript hat zunächst den Job, deren Ausführungsreihenfolge festzulegen. Dafür gibt es eine Prioritätenliste.

Wir haben also zweimal den Punkt-Operator und einmal das Plus. Punkt hat einen höheren Rang als Plus, damit wird Plus zurückgestellt. Und Punkt ist linksassoziativ, d.h. in einem Ausdruck wie a.b.c wird der linke Punkt vor dem rechten Punkt ausgewertet.

Damit ergibt sich diese Ausführungsreihenfolge:

  • Wende den Punkt-Operator auf das Objekt in document und den Namen formular1 an. Ergebnis ist ein Objekt des Typs HTMLFormElement. Hoffentlich :)
  • Wende den Punkt-Operator auf das ermittelte Form-Objekt und den Namen FeldWert an. Das Ergebnis ist bei Dir undefined, weil es kein Form-Element dieses Namens gibt. Wenn es eins gäbe, wäre das Ergebnis bspw. ein Objekt des Type HTMLInputElement.
  • Wende den Plus-Operator auf undefined und den (numerischen) Wert in i an. Der Plus-Operator kratzt sich nun am Kopf. Das sind aber keine gleichen Typen. Da muss ich erstmal einen gemeinsamen Typ finden, in die ich beide konvertieren kann. Javascript hat dafür interne Regeln. In der Konstellation undefined/Number macht es undefined zu einer Zahl, was NaN ergibt. NaN+1 bleibt NaN. Muh.

Naheliegend wäre es also, die Ausführungsreihenfolge zu ändern. Dafür gibt es Klammern. Und FeldWert ist keine Variable, sondern ein Namensteil, müsste also ein String in Anführungszeichen sein. Eigentlich...

document.formular1.("FeldWert"+i)

Das könnte funktionieren, wenn die Sprachdesigner es gewollt hätten. Wollten sie aber nicht. JavaScript erwartet rechts von einem Punkt einen festen Eigenschaftsnamen, und keinen Ausdruck, der den Namen bestimmt. Ist historisch so entstanden, das ist die Syntax der Sprache C und ihrer Abkömmlinge.

Statt dessen gibt es für diesen Fall eine andere Syntax, die Du von Arrays schon kennst:

document.formular1["FeldWert"+i]

Lektüre.

Rolf

--
sumpsi - posui - obstruxi
0 59

Schleife in einer Javascript funktion

Franz
  • javascript
  1. 1
    Tabellenkalk
    1. 0
      Franz
      1. 0
        Tabellenkalk
        1. 0
          Franz
          1. 0
            Rolf B
  2. 2
    Rolf B
    1. 0
      Franz
      1. 1
        JürgenB
        1. 0
          Rolf B
          1. 0
            JürgenB
          2. 0
            Tabellenkalk
      2. 1
        Rolf B
        1. 0
          Franz
          1. 0
            Rolf B
            1. 0
              Franz
              1. 0
                Rolf B
                1. 0
                  Franz
                  1. 0

                    Wert(e) aus function speichern für andere function vorbehalten und wiederverwenden

                    Franz
                    1. 0
                      Der Martin
                      1. 0
                        Rolf B
                    2. 1
                      Rolf B
                      1. 0
                        Franz
                        1. 0
                          Rolf B
                      2. 0

                        Summenzuweisung wird nicht ausgeführt

                        Franz
                        1. 0
                          Rolf B
                          1. 0
                            Franz
                            1. 0
                              Rolf B
                              1. 0

                                Summenzuweisung wird nicht ausgeführt, wenn INPUT Felder nicht übergen werden

                                Franz
                                1. 0
                                  Tabellenkalk
                                2. 0
                                  Der Martin
                                3. 0
                                  Rolf B
                                  1. 0
                                    Franz
                                    1. 0
                                      Rolf B
                                      1. 0
                                        Franz
                                        1. 0
                                          Rolf B
                                          1. 0
                                            Felix Riesterer
                                            1. 0
                                              Rolf B
                                              1. 0
                                                Felix Riesterer
                                                1. 0
                                                  Rolf B
                                          2. 0
                                            Franz
                                            1. 0
                                              Rolf B
                                              1. 0
                                                Franz
                                                1. 1
                                                  Rolf B
                                                  1. 0
                                                    Franz
                            2. 0
                              Rolf B
                              1. 0
                                Franz
                                1. 0
                                  Rolf B
                                  1. 0
                                    Franz
                                    1. 0
                                      Rolf B
                                      1. 0

                                        function setOptionalValue

                                        Franz
                                        1. 0
                                          Rolf B
                                          1. 0
                                            Franz
                                            1. 0
                                              Rolf B
                                    2. 0
                                      Matthias Scharwies
  3. 0
    Felix Riesterer
    1. 0
      Rolf B
  4. 0

    Bei fehlender Variable WIEDER Abbruch ?

    Franz
    1. 1
      Felix Riesterer