Hallo Therry,
du möchtest vielleicht ein Buch über JavaScript kaufen und durchlesen?
Oder dich hier anfangen, einzulesen?
Um auf deine Frage einzugehen:
Du musst dir die Feld-IDs zur Laufzeit dynamisch zusammenbauen, aus einem "e_" oder "a_" und einer laufenden Nummer. Das ist kein Problem, man kann einen String und eine Zahl einfach aneinander hängen. Wenn in i der Wert 1 steht, ergibt "a_" + i
die Zeichenkette "a_1"
. Für getElementById reicht das.
Für die Zugriffe, die Du über die document.form.element Schreibweise machst (also document.Rechner.e_2
oder so), funktioniert das nicht. Die Punkt-Schreibweise ist nur möglich, wenn Du den Namen der Objekteigenschaft vorab kennst. Steht der Name in einer Variablen, musst Du auf die [] Schreibweise zurückgreifen, wie bei Arrays. Enthält die Variable id
den String "e_2", dann würdest Du mit document.Rechner[id]
auf das e_2 Input-Element zugreifen.
Diese unterschiedliche Vorgehensweise solltest Du aber meiden. Vermutlich weißt Du gar nicht, dass document.getElementById("e_2")
und document.Rechner.e_2
in deinem Fall das gleiche Ergebnis haben. Verwende eine einheitliche Zugriffsmethode. Um das Problem mit variablen Feldnummern gleich mit zu erschlagen, könntest Du den Zugriff auf die input-Elemente in einer Funktion einkapseln:
function getField(typ, nr) {
let id = typ + "_" + nr;
return document.rechner[id];
}
Diese getField
Funktion liefert Dir nun die input-Elemente, basierend auf Typ (e oder a) und Nummer. Sie setzt das einfach zu a_1 oder e_47 zusammen.
getField("e", 1)
liefert Dir das Gleiche wie document.rechner.e_1
, oder auch wie document.getElementById("e_1")
.
Damit könntest Du schreiben:
getField("a", 1).value = getField("e", 1).valueAsNumber * 12;
oder, wenn's eine Schleife sein soll:
for (let i=1; i<=10; i++) {
getField("a", 1).value = getField("e", 1).valueAsNumber * 12;
}
Rolf
sumpsi - posui - obstruxi