Tolwin: Radios auf Seite zählen

Hallo Zusammen,

ich baue mir diverse Seiten dynamisch zusammen.
Auf diesen Seiten befindet sich eine unbestimmte Anzahl an Radio-Buttons (von 1 bis max 5)
Bevor der Nutzer die Seite sendet, möchte ich ermitteln welcher Button "checked" ist. Das mache ich mit einer simplen for Schleife.
Besteht die Möglichkeit per Javascript die Anzahl der vorkommenden Radios zu ermitteln. Diese benötige ich um das Inkrement für die For Schleife zu definieren.

Versucht hatte ich es, indem ich auf das Objekt document.forms[0].button
zugreifen wollte, bzw. mit count(document.forms[0].button). Das geht leider nicht. Gibt es hierfür nen kurzen und knackigen Befehl?

Schon mal danke und Gruß
Tolwin

  1. Noch mal ein Nachtrag,

    mir geht es nicht um eine For Schleife die Buttons zu count ...
    sondern gibt es eine JS Funktion die Objekte direkt countet?

    Gruß
    Tolwin

    1. gruss Tolwin,

      mir geht es nicht um eine For Schleife die Buttons zu count ...
      sondern gibt es eine JS Funktion die Objekte direkt countet?

      nein, es ist auch nicht sinnvoll, so etwas zu implementieren.
      Du hast aber immer die moeglichkeit, die laenge von [NodeList]s
      bzw. die laenge von [HTMLCollection]s oder eben die von [Array]s
      abzufragen.

      falls sich in Deinem speziellen fall alle "radio-controls" in
      einem einzigen formular tummeln, koenntest Du auch direkt die
      [elements]-collection dieses formulars durchlaufen, um alle
      *input-type-radio*-elemente zu filtern und anschliessend die
      laenge des durch den filter zurueckgegebenen arrays abfragen.

      beispielhaft saehe dass dann so aus:

      var formRadioControls = [link:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/filter#Compatibility@title=Array.filter](document.forms[0].elements, (function (elm/*, idx, arr*/) {  
        
       return ((typeof elm.nodeName == "string") && (elm.nodeName.toLowerCase() == "input") && (elm.type == "radio"));  
      }));  
      alert("formRadioControls.length : " + formRadioControls.length);/*  
        
       oder eben fuer dokumentenweit alle radio-controls:  
      */  
      var allRadioControls = Array.filter(document.getElementsByTagName("input"), (function (elm/*, idx, arr*/) {  
        
       return (elm.type == "radio");  
      }));  
      alert("allRadioControls.length : " + allRadioControls.length);/*  
        
      oder kuerzer:  
      */  
      var amountOfAllRadioControls = Array.filter(document.getElementsByTagName("input"), (function (elm) {  
        
       return (elm.type == "radio");  
        
      })).length;  
        
      alert("amountOfAllRadioControls : " + amountOfAllRadioControls);
      

      da Du aber ganz speziell wissen willst, welcher "radio-control"
      (pro radio-gruppe) *checked* ist, kann obige loesung gleich
      umgebaut werden:

      var allCheckedRadioControls = Array.filter(document.getElementsByTagName("input"), (function (elm/*, idx, arr*/) {  
        
       return ((elm.type == "radio") && elm.checked);  
      }));
      

      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:]
  2. Mahlzeit Tolwin,

    Besteht die Möglichkeit per Javascript die Anzahl der vorkommenden Radios zu ermitteln. Diese benötige ich um das Inkrement für die For Schleife zu definieren.

    Du kannst auf alle http://de.selfhtml.org/javascript/objekte/elements.htm@title=Elemente aller Formulare zugreifen. Wenn Du dann noch deren Typ bestimmst, weißt Du auch, ob es sich um einen Radiobutton handelt.

    Versucht hatte ich es, indem ich auf das Objekt document.forms[0].button
    zugreifen wollte, bzw. mit count(document.forms[0].button). Das geht leider nicht. Gibt es hierfür nen kurzen und knackigen Befehl?

    Das http://de.selfhtml.org/javascript/objekte/forms.htm@title=forms-Objekt kennt keine Eigenschaft oder ein Unterobjekt namens "button". Ebensowenig gibt es eine Standardfunktion namens "count()" - suchst Du vielleicht die http://de.selfhtml.org/javascript/objekte/forms.htm#length@title=length-Eigenschaft?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. ich baue mir diverse Seiten dynamisch zusammen.
    Auf diesen Seiten befindet sich eine unbestimmte Anzahl an Radio-Buttons (von 1 bis max 5)
    Bevor der Nutzer die Seite sendet, möchte ich ermitteln welcher Button "checked" ist. Das mache ich mit einer simplen for Schleife.
    Besteht die Möglichkeit per Javascript die Anzahl der vorkommenden Radios zu ermitteln. Diese benötige ich um das Inkrement für die For Schleife zu definieren.
    Versucht hatte ich es, indem ich auf das Objekt document.forms[0].button
    zugreifen wollte, bzw. mit count(document.forms[0].button). Das geht leider nicht. Gibt es hierfür nen kurzen und knackigen Befehl?

    Notiz
    Radiobuttons bilden aufgrund ihres Namens funktionale Gruppen.
    Dich dürfte get_elements_by_name interessieren. Du bekommst einen Array zurück.
    Sofern du die Richtlinien für das name Attribut einhältst, sind alle Elemente in diesem Array deine radio buttons.

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o