Alexander Zeitler: Herausfinden, welcher Feldtyp

Hallo,

ich übergebe an ein Javascript folgende Parameter:
Formularname
Feldname

Wie kann ich nun prüfen, ob es sich bei dem
Feld um eine Checkbox oder einen Radiobutton handelt?

Das Problem ist, daß eine Checkbox keine .length-Angabe (undefined) zurückliefert
und im Gegenzug der Radiobutton, sofern er nicht über
den Index des Arrays angesprochen wird, keine .type-Angabe (undefined) zurückliefert.
Ob ich einen Index benötige weiß ich aber ja nicht, wenn
ich nicht weiß, ob es ein Radiobutton ist.

typeof Feldname liefert bei beiden (checkbox und radio) immer object zurück, damit scheint es also auch nicht herauszufinden zu sein.

Gibt es hierfür eine Lösung?

Gruss

Alex

  1. Hallo,

    ich übergebe an ein Javascript folgende Parameter:
    Formularname
    Feldname

    Wie kann ich nun prüfen, ob es sich bei dem
    Feld um eine Checkbox oder einen Radiobutton handelt?

    Das Problem ist, daß eine Checkbox keine .length-Angabe (undefined) zurückliefert
    und im Gegenzug der Radiobutton, sofern er nicht über
    den Index des Arrays angesprochen wird, keine .type-Angabe (undefined) zurückliefert.
    Ob ich einen Index benötige weiß ich aber ja nicht, wenn
    ich nicht weiß, ob es ein Radiobutton ist.

    Kann ich nicht nachvollziehen:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Testcase</title>
    <script type="text/javascript">
    function test(f)
    {
       for(var i=0; f.elements[i];i++)
       {
           alert(f.elements[i].type);
       }
    }

    </script>
    </head>
    <body>
    <form>
    <input type="checkbox" value="c1">
    <br>
    <input type="radio" value="r1">
    <input type="radio" value="r1">
    <input type="radio" value="r1">
    <input type="radio" value="r1">
    <input type="radio" value="r1">
    <br>
    <input type="button" value="*** test   ****" onclick="test(this.form);">
    </form>
    </body>
    </html>

    Liefert alle Typen von allen Elementen.

    Struppi.

    1. Liefert alle Typen von allen Elementen.

      ja, dieses Sample aus Selfhtml wandert automatisch durch alle Elemente und erkennt den Typ und reagiert dann entsprechend. Spreche ich ein Feld aber direkt über den Namen an, klappt das nicht mehr:

      <input type="radio" name="radio" value="">
      <input type="radio" name="radio" value="">
      <script language="JavaScript">
      <!--
      {
      alert(radio.type);
      }
      //-->
      </script>

      zwischenzeitlich prüfe ich einfach die .type-Information gegen "undefined", ist dies der Fall, gehe ich davon aus, daß
      es ein Radio-Button ist.

      Trotzdem danke für Deine Bemühungen.

      Gruss

      Alex

      1. <input type="radio" name="radio" value="">
        <input type="radio" name="radio" value="">
        <script language="JavaScript">
        <!--
        {
        alert(radio.type);
        }
        //-->
        </script>

        zwischenzeitlich prüfe ich einfach die .type-Information gegen "undefined", ist dies der Fall, gehe ich davon aus, daß
        es ein Radio-Button ist.

        Das ist sowieso falsch!

        radio.type muss undefined sein, woher soll der Browser Wissen, welches Element des dokumentes du meinst?

        es muss heißen

        document.FormularName.ElementeName

        Die Lösung deines Problems ist:

        <form>
        <input type="radio" name="radio" value="">
        <input type="radio" name="radio" value="">
        </form>

        <script type="text/javascript">
        <!--
        function _type(el)
        {
             if(typeof el.length != 'undefined') return el[0].type;
             return el.type;
        }

        alert(_type(documnet.forms[0].radio));
        }
        //-->
        </script>

        Struppi.

        1. radio.type muss undefined sein, woher soll der Browser Wissen, welches Element des dokumentes du meinst?

          das sollte eigentlich nur die Problematik darstellen, aber es funktionierte weder mit document.formularname...... noch ohne.

          Die Lösung deines Problems ist:

          danke Dir.

          Gruss

          Alex