Formular mit JavaScript validieren und abschicken. (Schickt immer ab)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Formular mit JavaScript validieren und abschicken. (Schickt immer ab)

    Hallo Leute,

    es wäre super nett, wenn ihr den Fehler finden würdet, ich sitze hier ungelogen seit 2 Stunden dran. Habe auch schon einen Freund drüberschauen lassen. Der soll bis jetzt nur kontrollieren ob in alle Felder des Formulars was eingetragen worden ist und wenn ja soll er "SUBMIT" ausgeben, und wenn was fehlt, soll er mir sagen was. Die Fehlermeldung soll hinten angehengt werden, aber soweit kommt er anscheinend gar nicht :( Denn er zeigt im Linkfenster (get-Methode) immer an, er würde etwas verschicken.

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    3. <head>
    4. <title>Schlau mi T V</title>
    5. <script type="text/javascript">

    Quellcode

    1. var fehler = "Du hast vergessen\n";
    2. var agbfehler = "";
    3. var ausgabe = "";
    4. function validierung() {
    5. var f = document.forms[0].elements;
    6. if(f["Benutzer"].value==""){fehler+="\ndeinen Benutzernamen";}
    7. if(f["Vorname"].value==""){fehler+="\ndeinen Vornamen";}
    8. if(f["Nachname"].value==""){fehler+="\ndeinen Nachnamen";}
    9. if(f["Passwort"].value==""){fehler+="\ndein Passwort";}
    10. if(f["pWiederholung"].value==""){fehler+="\ndie Wiederholung deines Passwortes";}
    11. if(f["mail"].value==""){fehler+="deine Email-Adresse";}
    12. if(fehler!="Du hast vergessen\n"){
    13. fehler += "\n\nanzugeben.";
    14. ausgabe = fehler;
    15. if(!f["AGB"].checked) {
    16. agbfehler += "\nAußerdem hast Du vergessen den AGB zu zustimmen.";
    17. ausgabe += agbfehler;
    18. }
    19. //AUSGABE ausgabe
    20. document.getElementById("Fehlermeldung").appendChild(ausgabe);
    21. return false;
    22. }else if(!f["AGB"].checked) {
    23. agbfehler = "Du hast leider vergessen, den AGB zuzustimmen.";
    24. //AUSGABE agbfehler
    25. document.getElementById("Fehlermeldung").appendChild(agbfehler);
    26. return false;
    27. }else if(f["AGB"].checked) {
    28. //SUBMIT
    29. alert("SUBMIT");
    30. return true;
    31. }
    32. }
    Alles anzeigen


    Quellcode

    1. </script>
    2. </head>
    3. <body>
    4. <form onsubmit="return validierung(this);" >
    5. Benutzername: <input type="text" name="Benutzer" /><br />
    6. Vorname <input type="text" name="Vorname" /><br />
    7. Nachname <input type="text" name="Nachname" /><br /><br />
    8. Passwort <input type="password" name="Passwort" /><br />
    9. Passwort-Wiederholung <input type="password" name="pWiederholung" /><br /><br />
    10. E-Mail-Adresse <input type="text" name="mail" /><br /><br />
    11. Geburtstag Datepicker
    12. <br /><br /><br />Ich stimme den AGB zu:
    13. <input type="checkbox" name="AGB" value="ja" />
    14. <input type="submit" name="Submit" value="Registrieren" />
    15. </form>
    16. <span id="Fehlermeldung"></span>
    17. </body>
    18. </html>
    Alles anzeigen



    Danke, Noeden.

    Sorry, wenn der Fehler blöd ist, aber ich komm einfach nicht drauf :(



    // edit by vince - code highlighting
  • Hi,


    benutze einen normalen button und submitte die Form via JS.


    Quellcode

    1. <form name="registerForm" >
    2. [...]
    3. <input type="button" name="Submit" value="Registrieren" onclick="validierung()" />
    4. [...]



    Quellcode

    1. [...]
    2. }else if(f["AGB"].checked) {
    3. //SUBMIT
    4. alert("SUBMIT");
    5. document.forms["registerForm"].submit();
    6. return true;
    7. }[...]
  • Danke, aber jetzt schickt er es leider gar nicht mehr ab, ich poste nochmal den ganzen Code neu, bin mir nicht sicher, ob ich nicht was geändert habe. Bin ein wenig aufgelöst, mache wohl besser morgen weiter.

    Aber schonmal herzlichen Dank,


    Und Fehlermeldungen gibt er mir leider auch keine in die span-Tags.


    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    3. <head>
    4. <title></title>

    Quellcode

    1. <script type="text/javascript">
    2. var fehler = "Du hast vergessen\n";
    3. var agbfehler = "";
    4. var ausgabe = "";
    5. function validierung() {
    6. var f = document.forms[0].elements;
    7. if(f["Benutzer"].value==""){fehler+="\ndeinen Benutzernamen";}
    8. if(f["Vorname"].value==""){fehler+="\ndeinen Vornamen";}
    9. if(f["Nachname"].value==""){fehler+="\ndeinen Nachnamen";}
    10. if(f["Passwort"].value==""){fehler+="\ndein Passwort";}
    11. if(f["pWiederholung"].value==""){fehler+="\ndie Wiederholung deines Passwortes";}
    12. if(f["mail"].value==""){fehler+="deine Email-Adresse";}
    13. if(fehler!="Du hast vergessen\n"){
    14. fehler += "\n\nanzugeben.";
    15. ausgabe = fehler;
    16. if(!f["AGB"].checked) {
    17. agbfehler += "\nAußerdem hast Du vergessen den AGB zu zustimmen.";
    18. ausgabe += agbfehler;
    19. }
    20. //AUSGABE ausgabe
    21. document.getElementById("Fehlermeldung").appendChild(ausgabe);
    22. return false;
    23. }else if(!f["AGB"].checked) {
    24. agbfehler = "Du hast leider vergessen, den AGB zuzustimmen.";
    25. //AUSGABE agbfehler
    26. document.getElementById("Fehlermeldung").appendChild(agbfehler);
    27. return false;
    28. }else if(f["AGB"].checked) {
    29. //SUBMIT
    30. alert("SUBMIT");
    31. document.forms["registerForm"].submit();
    32. return true;
    33. }
    34. }
    35. </script>
    Alles anzeigen

    Quellcode

    1. </head>
    2. <body>
    3. <form name="registerForm" method="get">
    4. Benutzername: <input type="text" name="Benutzer" /><br />
    5. Vorname <input type="text" name="Vorname" /><br />
    6. Nachname <input type="text" name="Nachname" /><br /><br />
    7. Passwort <input type="password" name="Passwort" /><br />
    8. Passwort-Wiederholung <input type="password" name="pWiederholung" /><br /><br />
    9. E-Mail-Adresse <input type="text" name="mail" /><br /><br />
    10. Geburtstag Datepicker
    11. <br /><br /><br />Ich stimme den AGB zu:
    12. <input type="checkbox" name="AGB" value="ja" />
    13. <input type="button" name="Submit" value="Registrieren" onclick="validierung(this.form)" />
    14. </form>
    15. <span id="Fehlermeldung"></span>
    16. </body>
    17. </html>
    Alles anzeigen
  • Da muss ich vince zum allerersten mal widersprechen... Ich finde die Lösung mit dem onsubmit="return false" eigentlich eleganter.
    Allerdings solltest du die Referenz, die du mit this übergibst auch nutzen

    Also so

    Quellcode

    1. function validierung(f) {
    2. // var f = document.forms[0].elements;


    Ich habe deinen Code bei mir nicht ausprobiert, aber wenn es zu JavaScript Fehlern kommt, weil irgendeine Variable (z.B. f["Benutzer"]) nicht existiert, dann wird dein Formular dennoch abgeschickt.

    Schau einfach mal in die Firefox Fehlerkonsole nachdem du das Formular abschickst. Ich bin sicher, da steckt der Fehler.
  • Torben Brodt schrieb:

    Da muss ich vince zum allerersten mal widersprechen... Ich finde die Lösung mit dem onsubmit="return false" eigentlich eleganter.
    Allerdings solltest du die Referenz, die du mit this übergibst auch nutzen.

    Skandal :D Ich hatte vermutet "onsubmit" sei deprecated, dem ist nicht so. (Quelle W3C Forms)



    @noeden
    dein Problem ist die Ausgabe.
    appendChild() hängt keinen "Klartext" an das Element, sondern fordert ein Knotenobjekt.

    In deinem Fall musst du "innerText/innerHtml" nutzen.

    Quellcode

    1. document.getElementById("Fehlermeldung").innerText = ausgabe;