Martin: Formularauswertung funzt nicht :-(

Hi ihr,

ich mach grad meine ersten Gehversuche mit Javascript. Damit habe ich versucht, eine Formularauswertung hinzubiegen. Aber irgendwie passiert nix. :o( vielleicht könnt ihr euch den quelltext mal anschauen und mir Tipps geben!?

Viiiielen Dank! -Martin

--anmeldung.html

Quelltext Javascript:
<SCRIPT LANGUAGE="JavaScript">
<!--

function checkForm()
{
var error = false;
var error_message = "Eingabe-Fehler:\n";

if(document.anmeldung.name.value=="")
  {error = true;
   error_message += "- Bitte NAME angeben!\n";
 } else if(document.anmeldung.name.value.length <2)
  {error = true;
   error_message += "- Bitte korrekten NAME angeben!\n";}

if(!isNaN (document.anmeldung.name.value))
  {error = true;
   error_message += "- Bei NAME bitte keine Zahlen eingeben!\n";}

if(document.anmeldung.mitgliedschaft.options.value=="Bitte auswählen")
  {error = true;
   error_message += "- Bitte MITGLIEDSCHAFT auswählen!\n";}

if(document.anmeldung.strasse.value=="")
  {error = true;
   error_message += "- Bitte STRASSE angeben!\n";}

if(document.anmeldung.ort.value=="")
  {error = true;
   error_message += "- Bitte ORT angeben!\n";}

if(document.anmeldung.bank.value=="")
  {error = true;
   error_message += "- Bitte BANK angeben!\n";}

if(document.anmeldung.blz.value=="")
  {error = true;
   error_message += "- Bitte BLZ angeben!\n";}

if(document.anmeldung.kontonr.value=="")
  {error = true;
   error_message += "- Bitte KONTO-NR. angeben!\n";}

if (document.anmeldung.email.value == '')
  {error = true;
   error_message += "- Bitte EMAIL angeben!\n";}

} else if(document.anmeldung.email.value.indexOf("@") == -1)
  {error = true;
     error_message += "- Bitte korrekte EMAIL angeben!\n";}

function istEmail(mail) {
  // werden regular expressions unterstuetzt?
  var supported = 0;
  if (window.RegExp) {
  var tempStr = "a";
  var tempReg = new RegExp(tempStr);
  if (tempReg.test(tempStr)) supported = 1;
  }

if (!supported) {
  return (feld.indexOf(".") > 2) && (feld.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\.\.)|(@\.)|(^\.)");
  var r2 = new RegExp("^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0- 9]{1,3})(\]?)$");
  return (!r1.test(feld) && r2.test(feld));
  }
 }

function testEmail(str) {
  if (!isEmail(str)) {
  alert("Sie haben eine falsche eMail-Adresse eingegeben!\n Bitte korrigieren Sie Ihre Eingabe.");
  return false;
 }

else {
  return true;
 }

/* Ist irgendwo ein Fehler aufgetreten ? */
 if(error) {
  error_message += "\nBitte korrigieren !!!";
  alert(error_message);
  return false; //Formular wird nicht abgeschickt.
 } else {
  return true;  //Formular wird abgeschickt.
 }

}
//-->
</script>

Quelltext Formular:

<form action="mailto:email@email.de" method="POST" onSubmit="return checkForm();">
...
<input type="SUBMIT" value="Formular abschicken" onClick="return checkForm();">

  1. Hallo Martin,

    function istEmail(mail) {

    Hier definierst Du eine Funktion istEmail mitten in einer anderen Funktion (checkForm) => Parse error => Abbruch der Scriptausführung.

    function testEmail(str) {

    Hier definierst Du eine Funktion testEmail mitten in einer anderen Funktion => s.o. (genaugenommen kommt er gar nicht hierhin)

    if (!isEmail(str)) {

    Hier rufst Du eine nicht-existierende Funktion isEmail auf. Die Funktion heißt bei Dir aber istEmail. (mit t)

    /* Ist irgendwo ein Fehler aufgetreten ? */
    if(error) {
      error_message += "\nBitte korrigieren !!!";
      alert(error_message);
      return false; //Formular wird nicht abgeschickt.
    } else {
      return true;  //Formular wird abgeschickt.
    }

    Hier machst Du plötzlich mit dem Code in der Funktion checkForm weiter.

    Was mir irgendwie schleierhaft ist: in der Funktion testEmail machst Du ein alert(), in der Funktion checkForm sammelst Du aber alle Fehler.

    <form action="mailto:email@email.de" method="POST" onSubmit="return checkForm();">

    Hier fehlt der Name des Formulars. (in der JavaScript-Funktion checkForm verwendest Du anmeldung als Namen)

    Desweiteren funktioniert action="mailto:etwas" nur, wenn der Benutzer das Emailprogramm auch in den Browser eingebunden hat. Sinnvoller ist es, in dem Fall einen Formmailer zu verwenden. Da gibt es ein paar Feature-Artikel dazu. (aber vielleicht solltest Du Dir das für später aufheben, sobald das hier mal funktioniert :-))

    Im Prinzip musst Du so vorgehen:

    die Funktion istEmail aus der Funktion checkForm rausnehmen und darüber setzen. Die Funktion testEmail ganz rausschmeißen. (da Du ja am Ende von checkForm sowieso ein Alert mit allen Fehlermeldungen ausgibst) Danach solltest Du folgende Zeilen Code aus der Funktion checkForum so überarbeiten, dass die if-Anweisung istEmail aufruft, anstelle mit indexOf zu arbeiten:

    } else if(document.anmeldung.email.value.indexOf("@") == -1)
      {error = true;
         error_message += "- Bitte korrekte EMAIL angeben!\n";}

    (das überlasse ich jetzt mal Dir, sonst lernst Du nichts)

    Viel Spaß beim Programmieren!

    Grüße,

    Christian

    1. Hi Christian,

      vielen Dank für deine hilfe!! Ich werd mal bisschen weiter probieren. :-)

      <form action="mailto:email@email.de" method="POST" onSubmit="return checkForm();">
      Hier fehlt der Name des Formulars. (in der JavaScript-Funktion checkForm verwendest Du anmeldung als Namen)

      Muss es hier dann auch anmeldung.checkForm heißen?

      Desweiteren funktioniert action="mailto:etwas" nur, wenn der Benutzer das Emailprogramm auch in den Browser eingebunden hat. Sinnvoller ist es, in dem Fall einen Formmailer zu verwenden. Da gibt es ein paar Feature-Artikel dazu. (aber vielleicht solltest Du Dir das für später aufheben, sobald das hier mal funktioniert :-))

      ja, davon hab ich schon was gelesen. mal sehen. :-)

      Viele Grüße, --Martin

      1. Hallo Martin,

        <form action="mailto:email@email.de" method="POST" onSubmit="return checkForm();">
        Hier fehlt der Name des Formulars. (in der JavaScript-Funktion checkForm verwendest Du anmeldung als Namen)

        Muss es hier dann auch anmeldung.checkForm heißen?

        Nein - checkForm definierst Du ja als Funktion und diese werden direkt aufgerufen. Aber Dein Form-Tag muss noch ein zusätzliches Attribut name mit dem Wert anmeldung haben.

        Grüße,

        Christian