Sven Rautenberg: Checkbox einmal vorhanden --> length: undefined

Beitrag lesen

Moin!

Der Type des Elements ist egal:

<body onload="alert(document.forms[0].elements['rightdir'].length);">
<form>
  <input name="rightdir" type="checkbox" value="1" />
  <input name="rightdir" type="text" value="1" />
</form>


>   
> liefert auch 2, was ich auch durchaus erwartet hätte (da ich ein ähnliches Ergebnis wie getElementsByName() erwartete) aber nach Deiner Aussage:  
>   
> >  Ja, dieses Verhalten ist inkonsequent.  
>   
> nicht nur inkosequent sondern falsch ist, habe ich das richtig verstanden?  
  
Nein, das ist nicht falsch.  
  
Wenn im HTML-Formular zwei Elemente mit identischen Namen auftauchen, ist das aus Sicht von HTML kein Problem. Es ist auch aus Sicht des Formularabschickens auf dem Server kein Problem, denn die Formulardaten werden dann einfach zweimal ein name=value enthalten, bei dem der Name gleich ist (wie der Server dann weiß, welches Paar zu welchem Feld gehört, ist eine ganz andere Frage).  
  
Javascript muß mit diesem Umstand auch irgendwie umgehen. Und tut das so:  
- Wenn ein Elementname nur einmal vorkommt, ist es in der Elements-Collection ein ganz normales Objekt mit seinen Eigenschaften.  
document.forms[x].elements[y].value ist definiert  
  
- Wenn ein Elementname mehrfach vorkommt, wird aus dem normalen Element einfach ein Array, das eine length-Eigenschaft hat, und an die Eigenschaften des einzelnen Elements kommt man nur über einen Arrayindex ran.  
document.forms[x].elements[y].value ist undefiniert  
document.forms[x].elements[y].length ist definiert  
document.forms[x].elements[y][z].value ist definiert  
  
Dieses Verhalten ist in gewisser Weise etwas inkonsequent, aber wenn man es kennt, kann man sich drauf einstellen. Die Alternative wäre, dass sämtliche Formularelemente IMMER ein Array bilden und immer als document.forms[x].elements[y][0].value anzusprechen sind. Der relativ sinnlose Arrayindex kann aber mindestens genauso zu Verwirrungen führen - und er bläht die interne Struktur vermutlich auch etwas sinnlos auf.  
  
 - Sven Rautenberg

-- 
My sssignature, my preciousssss!