Fehler: window.document.Form1.elements[i] has no properties
Reese
- javascript
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
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
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
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
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
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
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
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
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
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.