Frank Bergermann: Pflichtfelder in Formularen!

Beitrag lesen

Danke für die schnelle Antwort!

Aber wie schaut das bei <option> Feldern oder Checkboxen aus?

Habe ich noch nicht bearbeitet, aber das gegebene schon mal erweitert:

  • erweiterte E-Mail-Überprüfung
  • setzt im Fehlerfalle den Focus() in's erste falsche Feld
  • Tabellenlayout
  • farbige Buttons (IE)
  • Schiftart (siehe Anmerkung bei font)

<Script language="JavaScript">
<!--

// Global, ermöglicht Zugriff in function plausibel() UND function falsch()
var Fehlermeldung;
var Focusfeld;

function plausibel()
{

var form = document.kontakt;  // hier Form-Namen angeben

var feld;

Fehlermeldung = "";
  Focusfeld = null;

feld = form.familienname;
  if (feld.value == "")
    falsch (feld, "Name fehlt");

feld = form.vorname;
  if (feld.value == "")
    falsch (feld, "Vorname fehlt");

feld = form.strasse;
  if (feld.value == "")
    falsch (feld, "Straße fehlt");

feld= form.plz;
  var plz=feld.value;
  if (plz == "")
    falsch (feld, "PLZ fehlt");
  else
  if ( isNaN(plz) )
    falsch (feld, "PLZ ist keine Zahl");
  else
  if ( plz.indexOf(".") != -1 )
    falsch (feld, "PLZ darf keinen Punkt enthalten");
  else
  if (plz.length != 5)
    falsch (feld, "PLZ falsch (keine 5 Stellen)");

feld = form.ort
  if (feld.value == "")
    falsch (feld, "Ort fehlt");

feld = form.mail
  var email=feld.value
  if (email == "")
    falsch (feld, "E-Mail fehlt");
  else
  {
    posat = email.indexOf("@");
    switch(posat)
    {
      case -1:
        falsch (feld, "E-Mail: @ fehlt");
      break;

case 0:
        falsch (feld, "E-Mail: Benutzerkonto fehlt");
      break;

default:
        posdot = email.lastIndexOf(".");
        if (email.lastIndexOf("@") !=posat)
          falsch (feld, "E-Mail: mehr als ein @");
        else
        if (posat == email.length-1 || posdot == posat+1)
          falsch (feld, "E-Mail: Domain fehlt");
        else
        if (posdot < posat || posdot == email.length-1)  // posdot < posat schließt auch posdot==-1 ein
          falsch (feld, "E-Mail: Top-Leve-Domain (z. B. ".de") fehlt");
      break;
    }
  }

if (Fehlermeldung != "")
  {
    // Fehlermeldung = "FEHLER:\n" + Fehlermeldung;
    alert(Fehlermeldung);
    Focusfeld.focus();
    return false;  // darf ausnahmsweise nicht 0 sein, würde dann troztdem gesendet
  }
  else
    // Verhindert verfrühtes Absenden bei Druck auf Return in einem Eingabefeld:
    return confirm("Formular jetzt absenden?");
    // return true;  // sonst (ohne Abfrage)

}

function falsch (feld, text) // Greift auf Variable Fehlermeldung und Focusfeld zurück
{
  if (Focusfeld == null)
    Focusfeld = feld;
  Fehlermeldung += text + ".\n";
}

//-->
</script>

</head>

<body onload="document.forms[0].elements[0].focus()">

<font face="Arial,sans-serif"><!-- NS nicht in Tabellen, muß dort in jede TD -->

<Form Method="get" Action="beispiel11.html"
  onSubmit="return plausibel();" Name="kontakt">
  <Table border=0 cellpadding=0 cellspacing=0>
    <TR><TD>Fam.-Name: </TD><TD><Input Name="familienname"> *)</TD></TR>
    <TR><TD>Vorname(n): </TD><TD><Input Name="vorname"> *)</TD></TR>
    <TR><TD>Sraße: </TD><TD><Input Name="strasse"> *)</TD></TR>
    <TR><TD>PLZ: </TD><TD>D-<Input Name="plz" Size=5 Maxlength=5> *)  
      Ort: <Input Name="ort"> *)</TD>
    </TR>
    <TR><TD valign="top">e-Mail: </TD><TD><Input Name="mail"> *)<BR>
      Ihre E-Mail-Adresse wird verwendet:<br>
      - für die Rückantwort<br>
      - für den Newsletter<br>
      - für Angebote</TD>
    </TR>
  </Table>
  <BR>
  *) Pflichtfelder<br>
  <BR>
  <!-- NS4 zeigt Style nicht an -->
  <Input Type="submit" Value="Absenden" Style="background-color:#00FF00">
  <Input Type="reset" Value="Löschen" Style="background-color:#FF4400">
</Form>

<p>
Ein Benutzer gibt seine E-Mail-Adresse nur dann freiwillig an, wenn er genau weiß,
was damit geschieht.
</p>

<p>
Bei abgeschaltetem Scripting erfolgt keine Überprüfung mehr.
Dann muß das Server-Script weiter prüfen.
Im Fehlerfalle kann es eine Fehlerseite mit einem "Zurück"-Button ausgeben
(manchmal werden aber bei Zurück die Eingaben gelöscht)
oder die Seite neu aufbauen, das ist aber sehr schwierig und wartungsaufwändig,
weil dann 2 Layouts parallel gepflegt werden müssen (hier und im Server-Script).
</p>

</body>
</html>