Rolf B: In einer javascript schleife a_1 a_2 mit der Zählvariable verbinden a_ i

Beitrag lesen

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