Michael Schütz: Form-Element Radio ansprechen

Hallo

Ich habe ein JS Array in welchem dynamsich die Namen der Formularleemente gespeichert sind:
z.B. var array = new Array('alter', 'geschlecht', 'bildung');

Über eine Schleife überprüfe ich, von welchem Typ das Element ist:

for (i=0; i<array.length; i++)
  if (document.getElementById(array[i]))
    if (document.getElementById(array[i]).type == "text"
      if (!document.getElementById(array[i]).value)
etc

Wie schaffe ich nun, alle Fadio-Elemente des Namens array[i] anzusprechen?
  if (document.getElementById(array[i]))
    if (document.getElementById(array[i]).type == "radio"
      if (!document.getElementById(array[i]).value)
        for (j=0; j<25; j++)
         if (document.Fragebogen.elements[array[i]+"["+j+"]"])

In dieser letzten Zeile ist der Fehler! Das Element findet er nicht
Wie kann ich auf ALLE RadioButtons mit dem Namen array[i] zugreifen, wenn mir der Name nur als Array vorliegt?

Besten Dank, ich komm hier nicht weiter und bekomme es langsam an die Nerven

Michael

  1. hi,

    Wie schaffe ich nun, alle Fadio-Elemente des Namens array[i] anzusprechen?

    document.Formularname.elements[array[i]][x] ...?

    if (document.getElementById(array[i]))

    Auf Grund deiner Beschreibung gehe ich davon aus, dass du mehrere Radiobuttons mit dem _Namen_ des in array[i] stehenden Strings hast - also was willst du hier mit getElementById? Das kann nur genau ein Element liefern, weil es auch nur genau ein Element mit dieser Id geben darf.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo wahsaga

      Dein Einwand stimmt, ich habe auch schon document.formularname.elements[array[i][x]] probiert, doch kein Browser liefert mir da ein Ergebnis

      Ich bekomme keine JS-Fehlermeldung, doch das Element wird offensichtlich nicht gefunden

      if (document.getElementById(array[i]).type == "radio") {
        alert(array[i]); // erfolgt
        for (j=0; j<25; j++) {
          if (document.Fragebogen.elements[array[i][j]]) {
            alert(j); // erfolgt nicht
          }
        }
      }

      <input type=radio name="button" id="button" value="1"> Button 1<br>
      <input type=radio name="button" id="button" value="2"> Button 2<br>
      <input type=radio name="button" id="button" value="3"> Button 3<br>

      hi,

      Wie schaffe ich nun, alle Fadio-Elemente des Namens array[i] anzusprechen?

      document.Formularname.elements[array[i]][x] ...?

      if (document.getElementById(array[i]))

      Auf Grund deiner Beschreibung gehe ich davon aus, dass du mehrere Radiobuttons mit dem _Namen_ des in array[i] stehenden Strings hast - also was willst du hier mit getElementById? Das kann nur genau ein Element liefern, weil es auch nur genau ein Element mit dieser Id geben darf.

      gruß,
      wahsaga

      1. Hallo,

        zunächst einmal ist Dein HTML-Markup nicht valide, wenn Du eine ID mehrfach vergibst, in Deinem Fall also an die Checkbox-Felder.
        Damit eine ID ihrem Zweck als Identifizierer gerecht werden kann, muß sie eindeutig sein.
        Das name-Attribut hingegen darfst Du mehrfach identisch belegen.
        Also etwa so:
        <input type="checkbox" name="auswahl" id="choice_1" value="foo" />
        <input type="checkbox" name="auswahl" id="choice_2" value="bar" />
        <input type="checkbox" name="auswahl" id="choice_3" value="baz" />

        Erst dann hast Du valides HTML und kannst überlegen, wie Du nun auf Deine Formularfelder zugreifst.
        Vielleicht mußt Du Deinen Ansatz umstellen und Dich an die name-Attribute halten (-> http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_name).

        Ciao,
        Andreas

        --
        "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
        1. Hallo Jörg,

          dass das mit drei mal gleicher ID nicht korrekt ist, weiss ich, doch bekomme ich innerhalb meines Systems sonst mit Netscape Probleme, wenn NAME und ID nicht übereinstimmen
          Und da if (document.getElementsByName(array[i]).type == "radio") bei NS und IE nicht funktioniert (auch wenn ID unterschiedlich) entschloss ich mich letztlich beides gleich zu setzen

          So funktionierts nun
          danke, hatte den Wald vor lauter Bäumen nicht meh gesehen

          } else if (document.getElementById(array[i]).type == "radio") {
            for (j=0; j<25; j++) {
              if (document.getElementsByName(array[i])[j]) {
                alert(document.getElementsByName(array[i])[j].checked);
              }
            }
          }

          Hallo,

          zunächst einmal ist Dein HTML-Markup nicht valide, wenn Du eine ID mehrfach vergibst, in Deinem Fall also an die Checkbox-Felder.
          Damit eine ID ihrem Zweck als Identifizierer gerecht werden kann, muß sie eindeutig sein.
          Das name-Attribut hingegen darfst Du mehrfach identisch belegen.
          Also etwa so:
          <input type="checkbox" name="auswahl" id="choice_1" value="foo" />
          <input type="checkbox" name="auswahl" id="choice_2" value="bar" />
          <input type="checkbox" name="auswahl" id="choice_3" value="baz" />

          Erst dann hast Du valides HTML und kannst überlegen, wie Du nun auf Deine Formularfelder zugreifst.
          Vielleicht mußt Du Deinen Ansatz umstellen und Dich an die name-Attribute halten (-> http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_name).

          Ciao,
          Andreas

      2. hi,

        Dein Einwand stimmt, ich habe auch schon document.formularname.elements[array[i][x]] probiert, doch kein Browser liefert mir da ein Ergebnis

        Das ist ja auch nicht die Schreibweise, die ich dir vorgeschlagen hatte.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }