Can: Warum klappt diese elements Abfrage nicht?

Hi Leute,

also ich bin gerade am JS basteln und will aus mehreren select Tags herausfinden, welches select gewählt wurde. Aber meine Abfrage klappt nicht. Sie schaut so aus:

for(var i = 0; i < all.length; i++)
 if(document.forms[0].elements[i].selected == true)
  alert(document.forms[0].elements[i].selectedIndex);

Ich will in dem Fall nämlich nicht wissen, welches option Feld aktiviert wurde, sondern nur welches Selekt, da ich diese Variable dann in der nächsten Operation benötige.

Kann mir einer sagen, warum dieser Code nicht klappt?

Grüße, Can

  1. Moin

    for(var i = 0; i < all.length; i++)

    was hast du hier mit "all" zu schaffen, du suchst doch nach forms[0].elements?

    Gruß
    rfb

    --
    Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
    (Galileo Galilei)
    1. Servus,

      das habe ich vergessen zu erwähnen... Das ist folgender COde:

      var all = el.form[el.name];
          alert('es gibt ' + all.length + ' Listen mit dem Namen ' + el.name);

      for(var i = 0; i < all.length; i++)
      was hast du hier mit "all" zu schaffen, du suchst doch nach forms[0].elements?

      Grüße, Can

      1. Moin

        das habe ich vergessen zu erwähnen... Das ist folgender COde:

        wie wäre es mal mit dem vollständigen Code, oder soll ich bei _jeder_ Variablen nachfragen wo die nun wieder herkommt?

        Gruß
        rfb

        --
        Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
        (Galileo Galilei)
        1. Oki, Punkt für Dich!

          <script language="JavaScript" type="text/JavaScript">
          <!--

          function showAll(el)
          {
              var all = el.form[el.name];
              alert('es gibt ' + all.length + ' Listen mit dem Namen ' + el.name);

          for(var i = 0; i < all.length; i++)
            if(document.forms[0].elements[i].selected == true)
             alert(document.forms[0].elements[i].selectedIndex);

          }

          //-->
          </script>

          Im HTML steht:

          <form id="form1" name="form1" method="post" action="">
           <select name='sortieren[]' onchange="showAll(this)">
           <option value='0-1' selected>0-1</option>
           <option value='2-3' >2-3</option>
           <option value='4-5' >4-5</option>
           <option value='6-7' >6-7</option>
           <option value='8-9' >8-9</option>
           <option value='10-11' >10-11</option>
           </select>

          <select name='sortieren[]' onchange="showAll(this)">
           <option value='0-1' >0-1</option>
           <option value='2-3' selected>2-3</option>
           <option value='4-5' >4-5</option>
           <option value='6-7' >6-7</option>
           <option value='8-9' >8-9</option>
           <option value='10-11' >10-11</option>
           </select>

          <select name='sortieren[]' onchange="showAll(this)">
           <option value='0-1' >0-1</option>
           <option value='2-3' >2-3</option>
           <option value='4-5' selected>4-5</option>
           <option value='6-7' >6-7</option>
           <option value='8-9' >8-9</option>
           <option value='10-11' >10-11</option>
           </select>

          1. Moin

            var all = el.form[el.name];

            all ist ein reservierter Name für das all-Object, also besser ändern

            if(document.forms[0].elements[i].selected == true)

            die Bedingung tritt nie ein, da müsste immer undefined als Ergebnis kommen, denn selected gibt es nur beim Unterelement options.

            Gruß
            rfb

            --
            Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
            (Galileo Galilei)
            1. Servus rfb,

              var all = el.form[el.name];
              all ist ein reservierter Name für das all-Object, also besser ändern

              Gut zu wissen, das werde ichmachen...

              if(document.forms[0].elements[i].selected == true)
              die Bedingung tritt nie ein, da müsste immer undefined als Ergebnis kommen, denn selected gibt es nur beim Unterelement options.

              Des ist schlecht. Gibt es eine andere Möglichkeit, herauszu finden, welches elemets[#] gewählt wurde?

              Viele Grüße, Can

              1. Hi,

                Des ist schlecht. Gibt es eine andere Möglichkeit, herauszu finden, welches elemets[#] gewählt wurde?

                Du übergibst doch das select-Element, in dem die Änderung eintritt, eh schon direkt an die Funktion showAll:

                function showAll(el)
                {
                [...]
                 <select name='sortieren[]' onchange="showAll(this)">
                [...]
                 <select name='sortieren[]' onchange="showAll(this)">
                [...]
                 <select name='sortieren[]' onchange="showAll(this)">

                In Deiner function showAll ist el das select-Element, das geändert wurde.

                cu,
                Andreas

                --
                Warum nennt sich Andreas hier MudGuard?
                Schreinerei Waechter
                O o ostern ...
                Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              2. gruss Can,

                Deine funktion [showAll] *kennt* das an sie uebergebene element ja bereits.
                   dannach durchlaeuft die funktion eine collection aller gleichnamig lautenden
                   elemente die zusammen mit dem an die funktion uebergebenen element in
                   einunddemselbem formular stecken (gleichnamig lautende elemente eines
                   anderen formulars werden nicht beruecksichtigt).

                soweit, sogut - und bishierher auch vollkommen richtig - jetzt mach doch
                   einfach weiter:
                   Deine funktion durchlaeuft eine collection voller [HTMLSelectElement]e und
                   referenziert schon das von Dir gesuchte [HTMLSelectElement].

                die zu formulierende bedingung lautet also wie?

                das war bestimmt so ein *wald vor lauter baeume ding* oder ?-)

                so long - peterS. - pseliger@gmx.net

                --
                »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
                Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
                ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]
                1. Danke für die Erklärung, dann meinst wohl das hier:

                  for(var i = 0; i < laenge.length; i++)
                       for(var j = 0; j < laenge.length; j++)
                    if(document.forms[0].elements[i].options[j].selected == true && document.forms[0].elements[i].options[j].defaultSelected == false)
                     alert(i);

                  So bekomme ich die richtigen Werte... Danke nochmals! Can

                  1. hallo again Can,

                    Danke für die Erklärung, dann meinst wohl das hier:
                    ...

                    noe. ich wollte eigentlich auf dasselbe, wie MudGuard
                       hinaus. ich dachte, wenn Du die [HTMLSelectElement]e
                       der collection mit dem an die funktion uebergebenem
                       vergleichst - so in der art: (all[i] == elm) - fallen Dir
                       die schuppen von den augen.

                    So bekomme ich die richtigen Werte... Danke nochmals! Can

                    ja, aber Du hast es Dir unnoetig schwer gemacht.

                    by(t)e by(t)e - peterS. - pseliger@gmx.net

                    --
                    »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
                    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
                    ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]
                    1. Servus peterS

                      noe. ich wollte eigentlich auf dasselbe, wie MudGuard
                         hinaus. ich dachte, wenn Du die [HTMLSelectElement]e
                         der collection mit dem an die funktion uebergebenem
                         vergleichst - so in der art: (all[i] == elm) - fallen Dir
                         die schuppen von den augen.

                      Oh je, warum einfach, wenn es auch schwierig geht. Danke für Euere geduld... Ich bin einfach kein JS Schreiber. Aber langsam beginnt es Spaß zu machen.

                      Schönes Wochenende, Can