Andy: Problem mit MailForm und Formular Validierung

Hallo!

Ich möchte in einem Web-Shop die Formulardaten an ein MailForm-Programm senden. Dies funktioniert soweit auch, jedoch seit dieses MailForm im Betrieb ist, kann ich nicht mehr die Formularfelder validieren (chkFormular() ). Vorher ging alles bestens. Nun wenn man aber auf den Button klickt werden die Daten gesendet und die nächste Seite öffnet sich (im IE kommt noch das Fehler-Ausrufezeichen in der Fusszeile, bevor die nächste Seite sich öffnet). Warum funktioniert das JavaScript chkFormular() nicht mehr?
Kann mir jemand weiterhelfen.

Besten Dank im voraus.
Gruss Andy

-----------------------------------

Ausschnitte aus dem Code:

function chkFormular()
{
   if(document.Formular.Name.value == "")
    {
     alert("Bitte Ihren Name eingeben!");
     document.Formular.Name.focus();
     return false;
    }
   if(document.Formular.Vorname.value=="")
    {
     alert("Bitte Ihren Vorname eingeben!");
     document.Formular.Vorname.focus();
     return false;
    }
   if(document.Formular.Strasse.value == "")
    {
     alert("Bitte Strasse eingeben!");
     document.Formular.Strasse.focus();
     return false;
    }

if(document.Formular.PLZ.value == "")
    {
     alert("Bitte PLZ eingeben!");
     document.Formular.PLZ.focus();
     return false;
    }
   for(i=0;i<document.Formular.PLZ.value.length;++i)
     if(document.Formular.PLZ.value.charAt(i) < "0"
        || document.Formular.PLZ.value.charAt(i) > "9")
     {
      alert("PLZ nicht numerisch!");
      document.Formular.PLZ.focus();
      return false;
    }
   if(document.Formular.Ort.value == "")
    {
     alert("Bitte Ihren Wohnort eingeben!");
     document.Formular.Ort.focus();
     return false;
    }
   if(document.Formular.From.value == "")
    {
     alert("Bitte Ihre E-Mail-Adresse eingeben!");
     document.Formular.From.focus();
     return false;
    }
   if(document.Formular.From.value.indexOf('@') == -1)
    {
     alert("Ungültige E-Mail Adresse!");
     document.Formular.From.focus();
     return false;
    }
    return true;
  }

... etc.

<form name="Bestellung" action="../cgi-bin/MailForm.exe" method="POST" onSubmit="return chkFormular()">
  <p>
  <input type="hidden" name="Subject" value="Bestellung">
  <input type="hidden" name="File" value="../shop/danke.htm">
  <input type="hidden" name="SMTP" value="mail.xy.ch">
  <input type="hidden" name="To" value="xy.xy@xy.ch">
  <input type="hidden" name="ToName" value="info">

<script language="JavaScript">
<!--
 if (sArt.length>0)
 {
  for (sArti=0; sArti<sArt.length; sArti++)
  {
   document.writeln('<input type="hidden" name="Artikel" value="'+sArt[sArti]+'">');
  }
 }
// -->
</script>

</p>
   <span class="ueberschrift"><strong>Auftraggeber</strong></span>
  <table border="0" width="98%" cellspacing="0">
    <tr>
      <td width="5%"> </td>
      <td width="30%" valign="top"> </td>
      <td width="65%"> </td>
    </tr>
    <tr>
      <td width="5%"> </td>
      <td width="30%" valign="top" class="standardtext">Name/Vorname:</td>
      <td width="65%"><input type="text" name="Name" size="15" value=""> <input
      type="text" name="Vorname" size="14" value=""></td>
    </tr>
    <tr>
      <td width="5%"> </td>
      <td width="30%" valign="top" class="standardtext">Strasse:</td>
      <td width="65%"><input type="text" name="Strasse" size="30"
      value=""></td>
    </tr>
    <tr>
      <td width="5%"> </td>
      <td width="30%" valign="top" class="standardtext">PLZ/Ort:</td>
      <td width="65%"> <input
      type="text" name="PLZ" size="5" value=""> <input type="text" name="Ort"
      size="20" value=""></td>
    </tr>
    <tr>
      <td width="5%"> </td>
      <td width="30%" valign="top" class="standardtext">E-Mail:</td>
      <td width="65%"><input type="text" name="From" size="30" value=""> </td>
    </tr>
  </table>

<p>
    <input type="submit" value="Bestellen" name="B1">
    <input type="reset"
  value="Reset" name="B2">
  </p>
</form>

  1. Hallo,

    (im IE kommt noch das Fehler-Ausrufezeichen in der Fusszeile, bevor die nächste Seite sich öffnet).

    Was kommt für eine Fehlermeldung, wenn Du auf das Ausrufezeichen klickst, was kommt für eine Fehlermeldung, wenn Du in Netscape javascript: eingibst? Die Antworten darauf könnten Dir u.U. bereits die Lösung verraten.

    Gruß Markus

    --
    alles wird gut...
    1. Hallo,

      Wenn ich die Felder leer lasse kommt zuerst folgender Fehler: 'document.Formular.Name' ist Null oder kein Objekt. Das bedeutet also, dass das Formularfeld "Name" nicht leer sein darf. Daraus schliesse ich, dass chFormular() ausgeführt wird. Soweit so gut, aber warum werden dann die Daten trotzdem schon an den MailForm gesendet und nicht das Name-Formularfeld fokussiert?

      Zudem kommt noch Fehler 84 (unbekannter Fehler).

      Gruss Andy

      1. Hallo,

        hab noch mal genauer in Deinen Quelltext gesehen...

        Wenn ich die Felder leer lasse kommt zuerst folgender Fehler: 'document.Formular.Name' ist Null oder kein Objekt. Das bedeutet also, dass das Formularfeld "Name" nicht leer sein darf.

        Nein. Das bedeutet, daß es das Formularfeld 'Name' im Formular namens 'Formular' nicht gibt, was daran liegt, daß Dein Formular 'bestellung' heißt. Du mußt also den Formularnamen überall ändern.

        Gruß Markus

        --
        alles wird gut...
        1. Hallo Markus

          Völlig richtig. Nun funktioniert alles einwandfrei. Vielen Dank für deine Bemühungen. Dieser dumme Fehler hätte mir eigentlich selber auffallen müssen...

          Gruss Andy

  2. Du weist zwar schon die Lösung, aber du kannst die ganze Sache noch mehr vereinfachen:

    statt:

    function chkFormular()

    Das:
    function chkFormular(f)
    {
       if(f.Name.value == "")
       {
         alert("Bitte Ihren Name eingeben!");
         f.Name.focus();
          return false;
        }
    .
    .
    .
    }

    Und statt:

    <form name="Bestellung" action="../cgi-bin/MailForm.exe" method="POST" onSubmit="return chkFormular()">

    Das hier:
    <form name="Bestellung" action="../cgi-bin/MailForm.exe" method="POST" onSubmit="return chkFormular(this)">

    Dann ist es völlig egal wie das Formular heißt.

    Struppi.