Enrico: Prüfung beliebiger Formulare

Beitrag lesen

Hallo,

Jetzt muss ich mich wieder mal vertrauensvoll an Euch wenden, weil ich mit der dynamischen Überprüfung von beliebigen Formularen noch nicht ganz zurande komme.

Zunächst verzeiht bitte die Länge des Postings, aber ich konnte die Länge leider nicht reduzieren.

Alle zu überprüfenden Formulare werden im onload-Handler des Body-Tags zunächst komplett initialisiert:

function Formular_init ()
{
  Anzahl_Pflichtfelder       = 0;
  Ausgefuellte_Pflichtfelder = 0;

Pflichtfeld = new Array ();
  Eingabe_OK  = new Array ();

for (var i = 0; i < document.forms[0].elements.length; i++)
  {
    Eingabe_OK [i] = new Boolean (false);

var Feld_Name = document.forms[0].elements[i].name;

if (Feld_Name.substring (0, 2) == "P_")
    {
      Pflichtfeld [i] = new Boolean (true);
      Anzahl_Pflichtfelder += 1;
    }
    else
      Pflichtfeld [i] = new Boolean (false);
  }
}

Hier werden das Flag für korrekte Eingaben aller Felder auf "false" gesetzt und die Anzahl der auszufüllenden Pflichtfelder über den Vorsatz "P_" im Feldnamen bestimmt.

Die einzelnen Eingabefelder sind immer nach dem gleichen Schema aufgebaut:

<input type="text"
       id="Name"
       name="P_Name"
       onblur="Eingabe_pruefen ('Name',                // ID des Feldes
                                 1,                    // 0 = Pflichtfeld bzw. 1 = optionales Eingabefeld
                                 'Anzeige_1',          // Platzhalter für Grafiktext
                                 'Hinweiszeichen_1')"> // Platzhalter für Grafik "Ausrufezeichen" bei Fehlern

Da ich das zu prüfende Formular anfänglich initialisiere und das aktive Feld immer beim onblur-Ereignis prüfe, habe ich das Kennzeichen "P_" für Pflichtfelder im Feldnamen und das Kennzeichen für Pflichtfelder (siehe oben: 0 = optional bzw. 1 = Pflicht) in der Funktion "Eingabe_prüfen" aufgenommen.

Die Funktion zum Überprüfen der Felder ist folgendermassen aufgebaut:

function Eingabe_pruefen (Feld_ID, Pflicht, Anzeige_ID, Zeichen_ID)
{
  var Formularfeld   = document.getElementById (Feld_ID);
  var Inhalt         = Leerzeichen_entfernen (Tags_loeschen (Formularfeld.value));
  Formularfeld.value = Inhalt;

var Fehler_1 = new Boolean (false); // Pflichtfeld leer
  var Fehler_2 = new Boolean (false); // Feld falsch ausgefüllt
  var OK       = new Boolean (false); /7 Eingabe OK

if (Feld_ID == "Name")
    Regularer_Ausdruck = ...;
  else
    if (Feld_ID == "eMail")
      Regularer_Ausdruck = ...;
    else
      if (Feld_ID == "Homepage")
        Regularer_Ausdruck = ...;
      else
       if (Feld_ID == "Kommentar")
         Regularer_Ausdruck = ...;

if (Inhalt.length == 0)
  {
    if (Pflicht == 1)
    {
      Eingabe_OK [i] = false;
      Fehler_1 = true; // Pflichtfeld leer
    }
  }
  else
  {
    if (! Regularer_Ausdruck.exec (Inhalt))
    {
      Eingabe_OK [i] = false;
      Fehler_2 = true; // Feld falsch ausgefüllt
    }
    else
    {
      Eingabe_OK [i] = true;
      OK = true; // Feld korrekt ausgefüllt
    }
  }

if (Fehler_1 == true) // Pflichtfeld leer
  {
    document.getElementById (Anzeige_ID).src = "pic/gfx/L_formular_eingabe_fehlt.png";
    document.getElementById (Zeichen_ID).src = "pic/gfx/L_formular_fehler.png";
  }
  else
    if (Fehler_2 == true) // Feld falsch ausgefüllt
    {
      document.getElementById (Anzeige_ID).src = "pic/gfx/L_formular_eingabe_ungueltig.png";
      document.getElementById (Zeichen_ID).src = "pic/gfx/L_formular_fehler.png";
    }
    else
      if (Eingabe_OK == true) // Feld korrekt ausgefüllt
      {
        document.getElementById (Anzeige_ID).src = "pic/gfx/L_formular_eingabe_ok.png";
        document.getElementById (Zeichen_ID).src = "pic/gfx/L_spacer.gif";
      }

for (var i = 0; i < document.forms[0].elements.length; i++)
  {
    if (Pflichtfeld [i] == true)
    {
      if (Eingabe_OK [i] == true)
        Ausgefuellte_Pflichtfelder += 1;
    }
  }
/*
  Zu Testzwecken:

if (Ausgefuellte_Pflichtfelder == Anzahl_Pflichtfelder)
    alert ("Alle Pflichtfelder ausgefüllt");
  else
    alert ("Anzahl Pflichtfelder: " + Anzahl_Pflichtfelder + " | ausgefüllt: " + Ausgefuellte_Pflichtfelder);
*/
}

Die Überprüfungen, ob das jeweilige Feld ein Pflichtfeld darstellt oder nicht, ob das jeweilige Feld überhaupt ausgefüllt wurde und wenn ja, ob der jeweilige Inhalt den Richtlinien (Reguläre Ausdrücke) entspricht, klappen eunwandfrei.

Was allerdings nicht funktioniert, ist die Überprüfung, ob die Anzahl der ausgefüllten Pflichtfelder auch der Anzahl der auszufüllenden Pflichtfelder entspricht:

if (Ausgefuellte_Pflichtfelder == Anzahl_Pflichtfelder)

Die Anzahl der vorhandenen Pflichtfelder wird aber in der Funktion "Formular_init ()" richtig ermittelt und in der Funktion "Eingabe_pruefen (...)" auch richtig angezeigt.

Was stimmt an meinem Code noch nicht ?

Vielen Dank für Eure Antworten.

Gruss, Enrico