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 Namenformular1
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 Dirundefined
, 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]
Rolf
sumpsi - posui - obstruxi