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

Beitrag lesen

Hallo, Mathias,

Warum machst du es so kompliziert? Willst du nur bestimmte Felder prüfen?

In meinem echten Formular sind tatsächlich nicht alle Felder unbedingt auszufüllen. Also liste ich mit
 var zuCheckenderParameter = new Array();

zuCheckenderParameter[0]  = "tabellenOrGrafikLinks";
 zuCheckenderParameter[1] =  "seitentyp";

/* Parameter vom Typ Text festlegen */
 var zuCheckenderParameterText = new Array();
zuCheckenderParameterText[0]  = "themaID";
// -->
</script>

explizit auf, welche Text oder radio-Felder _müssen_ gefüllt sein.

Es wäre viel einfacher, alle Formularfelder zu durchlaufen und zu prüfen.

Viel einfacher:

function check (formularobjekt) {
var ergebnis = "";
for (var i = 0; i < felder.length; i++) {
  feldgruppe = document.forms[formularobjekt.name].elements[ felder[i] ];
  feldanzahl = feldgruppe.length;
  var auswahlGetroffen = false;
  for (var j = 0; j < feldanzahl; j++) {
   if (
    (feldgruppe[j].type == "text" && feldgruppe[j].value != "") ||
    feldgruppe[j].checked
   ) {
    auswahlGetroffen = true;
   }
  }
  if (!auswahlGetroffen) {
   ueberschriftobjekt = document.getElementById(felder[i]);
   ergebnis += ueberschriftobjekt.firstChild.nodeValue + "\n";
   ueberschriftobjekt.style.color = "red";
  }
}
if (ergebnis != "") {
  window.alert("Bitte Angaben vervollständigen:\n\n" + ergebnis);
  return false;
}
return true;
}

Ich habe deine Lösung so in dieser HTML-Seite eingebunden

<html><head><title>Test</title>
<script type="text/javascript" src="plausicheck.js"></script>
</head>
<body>
<form action="" onSubmit="return check(this)"  name="formular">
<h1 id="themaID">Text-Eingaben</h1>
<p>
<input type="text" name="themaID" /> thema_ID<br />

</p>
<h1 id="tabellenOrGrafikLinks" >tabellenOrGrafikLinks</h1>
<input name="tabellenOrGrafikLinks" type="radio" value="tabelle"/> tabellenOrGrafikLinks<br />
<input name="tabellenOrGrafikLinks" type="radio" value="grafik" /> tabellenOrGrafikLinks<br />
<h1 id="seitentyp" >Seitentyp</h1>
<input name="seitentyp" type="radio" value="seitentyp0"/> seitentyp0<br />
<input name="seitentyp" type="radio" value="seitentyp1" /> seitentyp1<br />
<input name="seitentyp" type="radio" value="seitentyp2" /> seitentyp2<br />

<button type="submit" style="font-size: 9pt">Eingabe prüfen</button>
</form>
<hr/>

<script type="text/javascript">
var felder = ["tabellenOrGrafikLinks", "seitentyp", "themaID"];
</script>
</body></html>

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? ;-) Und ohne zweite Schleife kann man die Überprüfung nicht umsetzen?

gruss
Danke fürs Mitmachen

Gustav