Reese: Fehler: window.document.Form1.elements[i] has no properties

Hi @ all

Also gleich mal vorab, ich habe (fast) keine Ahnung was JavaScript betrifft. Deshalb auch meine Frage:

Ich bekomme bei dieser Funktion:

<script language="JavaScript" type="text/javascript">
 function alle()
 {
  var frage=window.document.Form1.checkbox.checked;

if(frage==true)
  {
   for(i=0;i<100;i++)
   {
    window.document.Form1.elements[i].checked=true;
   }
  }
  else
  {
   for(i=0;i<100;i++)
   {
    window.document.Form1.elements[i].checked=false;
   }
  }
 }
</script>

Folgende Fehlermeldung:

Fehler: window.document.Form1.elements[i] has no properties

Im FF funktioniert das "Script" trotzdem, sprich die Checkboxen werden aktiviert oder deaktiviert. (Der Fehler wird jedoch in der Fehlerkonsole protokolliert)
Beim IE bekomme ich die Fehlermeldung gleich mit einer MsgBOX.

Kann mir jemand sagen, was ich an der Funktion ändern muss?

Gruss aus der Schweiz

Reese

  1. Moin

    for(i=0;i<100;i++)

    gibt es diese 100 Formular-Elemente überhaupt?

    Du arbeitest hier ohne alle Sicherheitsabfragen, ob die Elemente, auf die du zugreifst, überhaupt existieren bzw. die Eigenschaft checked unterstützen.

    Gruß
    rfb

    --
    Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
    (Galileo Galilei)
    1. Nein, es sind keine 100 Elemente, es sind sicher weniger als 100

      Wie könnte ich die Anzahl auslesen?

      Moin

      for(i=0;i<100;i++)
      gibt es diese 100 Formular-Elemente überhaupt?

      Du arbeitest hier ohne alle Sicherheitsabfragen, ob die Elemente, auf die du zugreifst, überhaupt existieren bzw. die Eigenschaft checked unterstützen.

      Gruß
      rfb

      1. Moin

        Nein, es sind keine 100 Elemente, es sind sicher weniger als 100

        dann weißt du ja, warum die Fehlermeldung kommt.

        Wie könnte ich die Anzahl auslesen?

        window.document.Form1.elements bilden ein Array, wie bei allen Arrays erhältst du die Anzahl über
        window.document.Form1.elements.length

        Gruß
        rfb

        --
        Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
        (Galileo Galilei)
        1. window.document.Form1.elements bilden ein Array

          Nein, du irrst. Man erhält ein Objekt HTMLCollection. Nur weil dieses Objekt zufällig eine Eigenschaft length besitzt, ist es noch lange kein Array.

          Siechfred

          --
          Ich bin strenggenommen auch nur interessierter Laie. (molily)
      2. Wie könnte ich die Anzahl auslesen?

        var anzahl = document.Formularname.elements.length;

        liefert dir die Anzahl aller Eingabeelemente eines Formulars.

        var anzahl = document.getElementsByTagName('input').length;

        liefert dir die Anzahl aller Input-Elemente im Dokument, allerdings unabhängig von der Anzahl der enthaltenen Formulare.

        Siechfred

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)
        1. Das Problem ist, dass ich zwei Formulare habe und nur das einte betroffen ist.

          Aber die obere Variante sollte funktionieren, da ich nur Checkboxen und keine andere Felder habe.

          Wie könnte ich die Anzahl auslesen?

          var anzahl = document.Formularname.elements.length;

          liefert dir die Anzahl aller Eingabeelemente eines Formulars.

          var anzahl = document.getElementsByTagName('input').length;

          liefert dir die Anzahl aller Input-Elemente im Dokument, allerdings unabhängig von der Anzahl der enthaltenen Formulare.

          Siechfred

          1. Moin

            das ließe sich aber auch kombinieren:
            var eingabe=document.getElementsByName("Formularname")[0].getElementsByTagName('input');
            das Array eingabe enthält dann alle input-Elemente im Formular mit dem name-Attribut Formularname, per eingabe[nr] kannst du auf jedes zugreifen (ohne diesen Bandwurm) und eingabe.length gibt - wie immer - die Anzahl der Elemente

            Gruß
            rfb

            --
            Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
            (Galileo Galilei)
          2. Das Problem ist, dass ich zwei Formulare habe und nur das einte betroffen ist.

            Dann wende getElementsByTagName auf die Referenz auf das Formularobjekt an statt auf das gesamte Dokument:

            var anzahl = document.getElementsByName('formularname')[index].getElementsByTagName('input').length;

            oder

            var anzahl = document.getElementById('formularname').getElementsByTagName('input').length;

            Letzteres natürlich nur, wenn die Formulare auch mit IDs versehen sind.

            Siechfred

            --
            Ich bin strenggenommen auch nur interessierter Laie. (molily)
          3. Das Problem ist, dass ich zwei Formulare habe und nur das einte betroffen ist.

            Die Frage ist wie du das Skript aufrufst und wie heißen die Checkboxen?

            ein Beispiel, wie du checkboxen die den gleichen Namen haben markierst: http://javascript.jstruebig.de/javascript/29/

            Man kann natürlich auch ohne Probleme alle checkboxen markieren, dazu könnte man die Eigenschaft .type abfragen

            Struppi.

            --
            Javascript ist toll (Perl auch!)