Claudia: document.forms.elements und fieldsets

Hallo,

Ich wollte gerade mittels document.forms.elements durch alle Elemenet einer Form durchgehen, egal ob input, select oder textarea.

Wenn ich dies aber auf einer Form, welche Fieldsets enthaelt, anwende, enthaelt die HTMLCollection document.forms.elements auch die Fieldset-Elemente, obwohl diese meines Erachtens keine Form-control sind und auch nicht auf der Selfhtml-Seite zu form.elements gelistet sind.

Mach ich da was falsch oder gehoeren Fieldsets zu den Formcontrols?
Die alte W3c-Recommendation http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.2.1 erwaehnt die Fieldsets nicht, allerdings weiss ich nicht, wie aktuell das noch ist.

Ich weiss, dass ich die Fieldsets leicht in der Schleife ausschliessen kann, ich wuesste nur gern, warum diese ueberhaupt in der Collection drin sind.

Herzlichen Dank

Claudia

Hier mein Beispielformular:

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
<title>Übung Formular mit Javascript</title>  
<script type="text/javascript" src="main.js"></script>  
</head>  
<body>  
<form id="testform" action="test.php">  
  <fieldset id="anrede"><legend>Anrede</legend>  
    <label for="frau">Frau  
      <input type="radio" name="greeting" id="frau" value="frau" />  
    </label>  
    <!-- more form elements -->  
  </fieldset>  
  <br />  
  <label for="firstname">Vorname  
    <input type="text" name="firstname" id="firstname" />  
  </label>  
  <br />  
  <button type="submit">Abschicken</button>  
</form>  
</body>  
</html>  

und das (stark vereinfachte) Javascript:

  
function showFormElems() {  
  var myElems = document.forms['testform'].elements;  
  
  alert('found ' + myElems.length + ' form elements');  
  
  for(var i = 0; i < myElems.length; i++) {  
    alert(myElems[i].tagName);  
  }  
}  
  
function attachSubmit() {  
  document.getElementById('testform').onsubmit = function() {  
    showFormElems();  
    return false;  
  }  
}  
  
window.onload = attachSubmit;  

  1. Moin!

    Wenn ich dies aber auf einer Form, welche Fieldsets enthaelt, anwende, enthaelt die HTMLCollection document.forms.elements auch die Fieldset-Elemente, obwohl diese meines Erachtens keine Form-control sind und auch nicht auf der Selfhtml-Seite zu form.elements gelistet sind.

    Das ist ein Fehler in SELFHTML, wird berichtet.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
  2. Hi Claudia,

    wenn ich nicht irre, ist das hier die aktuelle Version HTML 4.01 Specification. Fieldset und Legend werden zwar nicht bei den Controls gelistet (wäre ja auch irgendwie unsinnig), wohl aber als Elements bezeichnet (auch wenn ihre vorwiegende Funktion explizit mit visueller u. logischer Strukurierung des Formulars angegeben wird). Wenn ich Sven richtig verstehe, bestätigt sein Posting das und insofern ist es dann konsequent, dass sie ausgegeben werden. Andererseits ist natürlich dein Gedanke gut nachvollziehbar, die Teilmenge der Controls direkt anzusprechen.

    Gruß
    Antipitch

    1. Hi Antipitch und Sven

      Danke fuer die Antworten. Ich hatte gestern abend noch das hier aufgetrieben: http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-76728479, was  direkt erwaehnt, dass forms.elements 'a collection of all form control elements in the form' zurueckgibt. Daher dachte ich, dass ich in meinem Test einfach was falsch hatte (Doctype oder so). Da das anscheinend nicht der Fall ist, muss ich halt die Fieldsets in der Schleife rausfiltern. Ist ja nicht so schlimm, solange man es weiss.

      Danke nochmal

      Claudia