Borkert: Concatenation: Javascript-Syntax durch Syntax erstellen

Auf einer Homepage befinden sich viele Input-Felder, die in einer quadratischen Form angeordnet sind.
Jede Zeile und jede Spalte beinhaltet gleich viele Input-Felder, die Anzahl der Zeilen und Spalten ist bekannt.

Das Name-Attribut der Input-Felder wurde per php automatisiert erstellt, und zwar ist es $Zeile."_".$Spalte.
Das dritte Input-Feld in Zeile 4 heißt also "4_3".

Nun würde ich gerne auf die verschiedenen Input-Felder zugreifen können.

Zu Testzwecken will ich sie mir per alert() ausgeben lassen.

Leider funktioniert das nicht so, wie ich es mir vorstelle.

<script>

var anzahl_z = 12;
var anzahl_sp = 30;

for (var z = 0; z <= anzahl_z; z++)
{
for (var sp = 0; sp <= anzahl_sp; sp++)
{
alert(document.formdata. + z + "_" + sp + .value;);
}
}
</script>

Ich würde mich über jede Hilfe bzw. über alternative Ansätze freuen!

Mfg,
Borkert

  1. Hallo,

    alert(document.formdata[z + "_" + sp].value;);
    Erst mal so, du musst hier die Array-variante nehmen,
    2. Eine gültige ID / ein gültiger Name beginnt nicht mit einer Zahl, alo nicht 4_3 sondern z.B. fld_4_3
    3. document.getElementById ist moderner

    mfg, Flo

    --
    Developers are dying. Computers are getting trash. CEO's become forgetten. The only remaining things are ideas, lies and crises. So if you want to be immortal, first think, than stop it and go to microsoft and become later a manager at Lehman Brothers...
    sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
    *Zu dem de:> Ich benutze wegen IE im moment noch tabellen, weil dieser display:table noch nicht versteht. Ich werde aber, wenn IE 6 & IE 7 < 10% mein neues CSS-Layout einspielen...
    1. Hallo Flo,

      Erstmal vielen Dank für die Hilfestellung!

      Hallo,

      alert(document.formdata[z + "_" + sp].value;);
      Erst mal so, du musst hier die Array-variante nehmen,
      2. Eine gültige ID / ein gültiger Name beginnt nicht mit einer Zahl, alo nicht 4_3 sondern z.B. fld_4_3

      Habe den Namen der input-Felder auf einen gültigen Namen geändert (z.B.: fld_4_5)
      Leider wird mir folgender Fehler ausgegebe:
      Fehler: document.formdata["fld_" + z + "_" + sp] is undefined

      1. document.getElementById ist moderner

      Ok, werde ich mir mal anschauen!

      Mfg,
      Borkert

  2. Hallo,

    Das Name-Attribut der Input-Felder wurde per php automatisiert erstellt, und zwar ist es $Zeile."_".$Spalte.
    Das dritte Input-Feld in Zeile 4 heißt also "4_3".

    soweit ich weiß, dürfen die names nicht mit einer Ziffer beginnen - aber da bin ich nicht absolut sicher; bei ids ist es jedenfalls so.

    alert(document.formdata. + z + "_" + sp + .value;);

    Das geht natürlich nicht. Aber für solche Fälle gibt es ja alternative Adressierungsschemata (Schema 4).

    So long,
     Martin

    --
    Ich wollt', ich wär ein Teppich.
    Dann könnte ich morgens liegenbleiben.
    1. Hallo Martin,

      Vielen Dank für deine Hilfe!

      soweit ich weiß, dürfen die names nicht mit einer Ziffer beginnen - aber da bin ich nicht absolut sicher; bei ids ist es jedenfalls so.

      Habs bereits geändert.

      alert(document.formdata. + z + "_" + sp + .value;);

      Das geht natürlich nicht. Aber für solche Fälle gibt es ja alternative Adressierungsschemata (Schema 4).

      document.forms["Formularname"].Eigenschaft
      document.forms["Formularname"].Methode

      Ziel = document.forms["Testformular"].action;
      document.forms["Testformular"].reset();

      Sehe ich das richtig, dass der Klammernausdruck den Namen des Formulars (Form) beinhaltet? Wie kann ich das bei inputnamen machen?
      Was muss da dann vor der Klammer statt "forms" stehen?

      document.formdata.["fld" + z + "_" + sp].value

      Danke,
      Borkert

      1. Hallo,

        document.formdata.["fld" + z + "_" + sp].value

        entweder der Punkt (dann folgt der Feldname im Klartext), oder die Index-Klammern (dann kann der Feldname auch eine Variable oder ein zusammengesetzter Ausdruck sein).
        Aber nicht beides.

        Ciao,
         Martin

        --
        Wenn die Amerikaner eines Tages von jeder Tierart ein Pärchen nach Cape Canaveral treiben ...
        ja, DANN sollte man endlich misstrauisch werden.
        1. Danke, habs jetzt so gelöst:

          alert(document.getElementsByName("fld_" + z + "_" + sp)[0].value);

  3. Hallo Borkert,

    var anzahl_z = 12;
    var anzahl_sp = 30;

    for (var z = 0; z <= anzahl_z; z++)

    13 Durchläufe!

    for (var sp = 0; sp <= anzahl_sp; sp++)

    31 Durchläufe!

    Sollen es wirklich so viele sein? Sonst musst du die "<=" durch "<" ersetzen.

    Gruß, Jürgen

    1. Sollen es wirklich so viele sein? Sonst musst du die "<=" durch "<" ersetzen.

      Danke Jürgen für deine Aufmerksamkeit!
      Muss mir das - wenn es dann funktioniert - selber noch anschauen.
      Hab irgendwie den Überblick verloren, weil ich inkonsistenterweise bei einigen Elementen ei 0 zu zählen beginnen und bei anderen nicht...

      Lg, Borkert

      1. Hab irgendwie den Überblick verloren, weil ich inkonsistenterweise bei einigen Elementen ei 0 zu zählen beginnen und bei anderen nicht...

        Das war übrigens auch der Grund, warum es nicht funktioniert (von wegen undefiend) hat...

        Jetzt klappt es!

        Vielen Dank an alle für eure Hilfe!