Joe Koenig: getElementsByName auf bestimmte Formulare anwenden

Hallo,

ich hole mir Elemente per
elemente = document.getElementsByName("elemente_1");
und stelle dann /Dinge/ damit an :-)

Dabei erwische ich auch gleichnamige Elemente aus verschiedenen Formularen.  Was ich eigentlich möchte ist sowas wie:
elemente = document['form_1'].getElementsByName("elemente_1");
Aber das geht ja nicht.  Als einziger Workaround fällt mir jetzt nur ein:
if (elemente[x].parentNode.name == "form_1") { ... }

Fällt euch was eleganteres dazu ein?
Joe

  1. Hallo Joe,

    Dabei erwische ich auch gleichnamige Elemente aus verschiedenen Formularen.  Was ich eigentlich möchte ist sowas wie:
    elemente = document['form_1'].getElementsByName("elemente_1");
    Aber das geht ja nicht.  Als einziger Workaround fällt mir jetzt nur ein:
    if (elemente[x].parentNode.name == "form_1") { ... }

    Fällt euch was eleganteres dazu ein?

    Ja,
    if (elemente[x].form.name == "form_1") { ... }
    oder
    elemente = document.getElementsByName('form_1')[0].getElementsByName("elemente_1");

    Was hast du vor? Willst du etwa z.B. gecheckte Radiobuttons bei erneutem Klick so wie Checkboxen wieder ungecheckt machen? Dann kannst du ja auch ihr jeweiliges Fromular über this.form ansprechen und alle ihre darin enthaltenen gleichnamigen Geschwister über this.form.elements[this.name]

    Gruß Gernot

    1. Hallo,

      elemente = document.getElementsByName('form_1')[0].getElementsByName("elemente_1");

      elemente = document.getElementsByName('form_1')[0].getElementsByName("elemente_1")[0];

      Gruß Gernot

      schön Dich auch mal wieder zu lesen.  :)

      Gruß aus Berlin!
      eddi

      --
      Der Verweis auf die Grundlagen Deines Handelns, ist das Joch zur Freiheit.
      Aber so gilt: Allen Leuten Recht getan, ist keine Kunst, weil's jeder kann.
    2. Hallo Gernot,

      elemente = document.getElementsByName('form_1')[0].getElementsByName("elemente_1");

      Also, das scheint hier nicht zu klappen.
      document.getElementsByName('form_1')[0]
      ist doch ein form-Element und kennt somit getElementsByName() nicht, oder?  Getestet mit Mozilla Firefox 2.0.0.14 auf Linux.

      var gnubbel = document.form_1.getElementsByTagName('input');
      geht natürlich auch nicht, da nicht immer alle input-Element angesprochen werden sollen.  Und immer divs um alle betroffenen Elemente packen ist auch doof.

      Hier ein kleines Beispiel:

        
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
      <HTML>  
      <HEAD>  
      <script type="text/javascript" language="JavaScript"><!--  
      [code lang=javascript]  
      function foo(elemente, formname)  
      {  
          var gnubbel = document.getElementsByName(elemente);  
          // var gnubbel = document.getElementsByName(formname)[0].getElementsByName(elemente);  
        
          var zahl = gnubbel.length;  
          for (i=0; i < zahl; i++){  
              gnubbel[i].setAttribute("type", "radio");  
              gnubbel[i].style.marginLeft = "50px";  
          }  
      }  
      
      

      //--></script>
      </HEAD>
      <body>

      <form  name="form_1" id="form_1" style="margin:200px 200px; border:1px solid;">
      <a href="javascript:foo('s1', 'form_1')">foo</a><br><br>
      <input type="checkbox" name="s1" id="s01" value="1">1<br>
      <input type="checkbox" name="s1" id="s02" value="2">2<br>
      <input type="checkbox" name="s1" id="s03" value="3">3<br>
      <input type="checkbox" name="s1" id="s04" value="4">4<br>
      </form>

      <form  name="form_zwei" id="form_zwei" style="margin:200px 200px; border:1px solid;">
      Diese Elemente sollen nicht angesprochen werden:<br>
      <input type="checkbox" name="s1" id="s05" value="1">1<br>
      <input type="checkbox" name="s1" id="s06" value="2">2<br>
      <input type="checkbox" name="s1" id="s07" value="3">3<br>
      <input type="checkbox" name="s1" id="s08" value="4">4<br>
      </form>
      </body>
      </html>
      [/code]

      1. Hallo Gernot,

        elemente = document.getElementsByName('form_1')[0].getElementsByName("elemente_1");

        Also, das scheint hier nicht zu klappen.

        Das http://de.selfhtml.org/javascript/objekte/elements.htm klappt einwandrei.

        Struppi.