peha: Formulare prüfen

Hallo,

möchte mein Formular mit JavaScript auf sinnvolle Eingaben prüfen. Leider schlagen alle meine Versuche fehl, da die Funktion "checkNachricht()" nicht vollständig durchläuft. Im Folgenden ein vereinfachter Beispielcode:

<form name="Formular" action="mailto:zumir@home.de" method="post" onSubmit="return checkNachricht()"  enctype="text/plain">
 <pre>

Vorwahl:  <input type="text" size="10" name="Vorwahl">    Telefon: <input type="text" size="10" name="Telefon">

E-Mail: <input type= submit value="Absenden"> <input type=reset value="Löschen">
 </pre>
</form>

function checkNachricht() {
   alert("dieser alert funktioniert!");

if(document.Formular.Vorwahl.value=="") {
    alert ("dieser alert nicht");
   }else alert("dieser alert auch nicht");
}

Der erste alert-Befehl wird ausgeführt, aber keiner der folgenden alerts. Hab schon einiges rumprobiert und gegoogelt - ohne Erfolg. Freue mich über jede Anregung.

Grüße peha

  1. Hi,

    <form name="Formular" action="mailto:zumir@home.de"

    Du solltest Dich unbedingt über die zahlreichen Nachteile von mailto-Formularen informieren. Genauer gesagt solltest Du sie unbedingt durch etwas Sinnbehaftetes ersetzen.

    Der erste alert-Befehl wird ausgeführt, aber keiner der folgenden alerts.

    Da mir im Code an sich nichts Schlimmes auffällt: Verlinke bitte eine Testseite.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,

      werde mir die Nachteile von mailto genauer anschauen, danke für den Hinweis.
      Ich habe keinen Freespace aufm Server und kann keine Testseite verlinken (soweit ich weiß).
      Ich kann mir absolut nicht vorstellen an was es liegen könnte, da die Funktion wie gewünscht aufgerufen wird und offensichtlich ok ist.

      Kannst du mir mit den vorhandenen Infos nen Tipp geben, wo ich nach der Ursache suchen kann, oder ist eine Fehlereinschränkung so nicht möglich?

      peha

      1. Hallo,

        Kannst du mir mit den vorhandenen Infos nen Tipp geben, wo ich nach der Ursache suchen kann, oder ist eine Fehlereinschränkung so nicht möglich?

        Habe deinen Code kurz getestet und alles läuft ok. Bei mir erscheinen alle alerts.

        Allerdings würde ich ein paar Schönheitskorrekturen vornehmen:

        statt

          
        E-Mail: <input type= submit value="Absenden"> <input type=reset value="Löschen">
        

        besser

          
        E-Mail: <input type="submit" value="Absenden"> <input type=reset value="Löschen">
        

        und statt

          
           if(document.Formular.Vorwahl.value=="") {  
            alert ("dieser alert nicht");  
           }else alert("dieser alert auch nicht");
        

        besser

          
           if (document.Formular.Vorwahl.value) {  
            alert("dieser alert nicht");  
           } else {  
            alert("dieser alert auch nicht");  
           }
        

        Es macht im Allgemeinen wenig Sinn, gegen "", 0, undefined, null, false oder true mit == zu vergleichen, weil z.B. ' \t\r\n' == 0 gilt. Solche Vergleiche sollten ohne Typumwandlung, d.h. mit === gemacht werden, oder aber, wenn man die automatische Typumwandlung wirklich will, ganz ohne Vergleichsoperatoren.

        Wenn bei dir keiner der beiden letzten alerts erscheint, muss etwas in der Fehlerkonsole zu finden sein. Denn es muss ja entweder der if-Zweig oder der else-Zweig erreicht werden.
        Da das bei dir offenbar nicht der Fall ist, hat der Interpreter schon vorher aufgrund irgend eines Fehlers die Verarbeitung abgebrochen => siehe Fehlerkonsole.

        Gruß, Don P

        1. Hi,
          danke für den Hinweis mit der Fehlerkonsole, hätt ich selber draufkommen können doch mir fehlt noch die Routine.

          Also die Fehlermeldung in der Konsole lautete:
          document.Formular.Vorwahl.value ist null oder kein Objekt.

          Daraufhin habe ich im Archiv nach Alternativen gestöbert und folgende Änderung vorgenommen die jetzt auch auf meiner HP funktioniert:
          Die checkNachricht() mit Parameter this versehen, und in der Funktion den Parameter anstelle von document.Formular gesetzt. Code sieht dann so aus:

          <form name="Formular" action="mailto:zumir@home.de" method="post" onSubmit="return checkNachricht(this)"  enctype="text/plain">

          function checkNachricht(f) {
             alert("dieser alert funktioniert!");

          if(f.Vorwahl.value=="") {
              alert ("dieser alert nicht");
             }else alert("dieser alert auch nicht");
          }

          Wie gesagt es funktioniert jetzt und ich danke euch allen, doch der ursprüngliche Fehler ist mir dennoch nicht klar und gerne würd ichs besser verstehen wollen...

          Grüße peha

          1. Also die Fehlermeldung in der Konsole lautete:
            document.Formular.Vorwahl.value ist null oder kein Objekt.

            Meine Vermutung, du hast mehrere Formulare mit dem Namen 'Formular' in deinem Dokument.
            Licht in die Sache hätte gebracht, wenn du dir mal ausgeben läßt was du hier genau hast:

            alert(document.Formular);  
            alert(document.Formular.Vorwahl);  
            
            

            if(f.Vorwahl.value=="") {

            Du hättest auch den ausführlichen Hinweis von Don P beherzigen können, der Test auf "" ist hier überflüssig.
            Besser:if(!f.Vorwahl.value) {

            Struppi.

            1. Hi,

              Du hättest auch den ausführlichen Hinweis von Don P beherzigen können, der Test auf "" ist hier überflüssig.

              Den Tipp von Don P werd ich danken annehmen.

              Meine Vermutung, du hast mehrere Formulare mit dem Namen 'Formular' in deinem Dokument.

              Deine Vermutung trifft zu, ich hab in einer anderen Funktion das Formular kopiert und im Dokument auf hidden gesetzt. Hab ich im Eifer leider vergessen. Danke für die super Antworten, ist ne klasse Hilfe! -)

              Habe wohl noch nen Anfängerfehler gemacht. Ich habe Links in einem Dokument, der verschiedene iframes mit Inhalt füllen soll (u.a. einen mit dem Formular). Diese Inhalte habe ich im gleichen Dokument in divs geschrieben und mit DOM in die iframes gesetzt. Die Texte sollten wohl besser in extra html dateien und von da in die iframes, oder gibts nen besseren Ansatz?

              peha