molily: feldgruppe[j].type == "text" && feldgruppe[j] ... funz-t nicht?

Beitrag lesen

Hallo,

und in meinem Test wird in dieser Seite von der check()-Methode bemängelt, dass das "text"-Feld themaID angeblich _nicht_ gefüllt ist, obwohl das Feld nicht leer war. Also scheint die Überprüfung

if (
    (feldgruppe[j].type == "text" && feldgruppe[j].value != "") ||
    feldgruppe[j].checked
   ) {
    auswahlGetroffen = true;
   }

in deiner Lösung den gleichen Manko haben, wie meine ursprüngliche Variante? ;-)

Nein. Der Fehler liegt woanders. Bei text-Eingabefeldern steigt er erst gar nicht in die innere for-Schleife ein. Muss er ja auch nicht, es gibt ja nur ein Feld pro Namen (name) bei Texteingabefeldern. feldgruppe.length ist undefined, weil es sich eben um keine Collection von Radio-Optionen handelt. Dann fragt man halt ab, ob feldgruppe ein Elementknoten oder eine Collection von Elementknoten ist. Da gibt es wahrlich dutzende Möglichkeiten. Eine davon habe ich schon aufgezeigt (Unterscheidung nach type oder value). Eine andere nach feldgruppe.length sähe eingebaut dann so aus:

for (var i = 0; i < felder.length; i++) {
  var auswahlGetroffen = false;
  feldgruppe = document.forms[formularobjekt.name].elements[ felder[i] ];
  if (feldanzahl=feldgruppe.length) { // oder typeof(feldgruppe.length)!='undefined' oder umgekehrt if (feldgruppe.type && feldgruppe.type=="text") oder, oder, oder...
   // falls es sich um Radiooptionen handelt, durchlaufe die Felder:
   for (var j = 0; j < feldanzahl; j++) {
    if (feldgruppe[j].checked) {
     auswahlGetroffen = true;
    }
   }
  } else {
   // falls es sich um ein Texteingabefeld handelt
   if (feldgruppe.value != "") {
    auswahlGetroffen = true;
   } // ... andere Feldarten können nach demselben Schema berücksichtigt werden
  }
  ...
 }

Und ohne zweite Schleife kann man die Überprüfung nicht umsetzen?

Du musst nur an der richtigen Stelle eine Fallunterscheidung einbauen, die zwischen Radio-Feldern und Text-Feldern unterscheidet. Dies kann *in* der Schleife passieren, insofern sind keine zwei Schleifen notwendig. Das hättest du erkannt, wenn du meinen Code untersucht hättest.
Verzeihung, aber wenn ich dir schon eine Vorlage liefere, welche den Punkt herausarbeitet, über den deine Frage gelöst werden kann, dann kannst du den verbleibenden Fehler wenigstens selbst suchen. Ich will hier nicht ständig fertigen Code posten.

Mathias