Basti Kurz: return false versagt?

Hallo!

Folgendes Problem:
Ich checke mit Javascript, ob alle Pflichtfelder eines Formulars ausgefüllt wurden. Ist das nicht der Fall, soll das Script FALSE zurückgeben, damit mein Formular nicht abgeschickt wird.
Das alleine funktioniert auch. Jetzt dachte ich mir allerdings, daß ich die auszufüllenden Pflichtfelder noch mal vorher in roter Schrift markiere und hier funktioniert dann nichts mehr, mein Formular wird jetzt trotzdem abgeschickt. Scheinbar funktioniert die Rückgabe des FALSE nicht mehr.
Was passiert hier? Der wichtige Code sind diese Zeilen:
if ( !ausgefuellt )
{
  document.writeln("Es wurden nicht alle Pflichtfelder ausgefüllt");
  document.getElementById("vorname").style.color = "#ff0000";
  document.getElementById("name").style.color = "#ff0000";
  document.getElementById("geburtsdatum").style.color = "#ff0000";
  return false;
}

Danke für Hilfe.

  1. Hi,

    document.writeln("Es wurden nicht alle Pflichtfelder ausgefüllt");

    überschreibst Du hiermit nicht die gesamte Seite incl. des Scripts?
    Probier's doch mal mit alert().

    freundliche Grüße
    Ingo

    1. Probier's doch mal mit alert().

      Danke, aber mit alert() bekomme ich den gleichen Effekt. Das hatte ich da auch schon stehen. Also daran liegt es nicht.

      1. Hi,

        tja, ich fürchte, dann brauchen wir schon etwas mehr code...

        freundliche Grüße
        Ingo

        1. Also dann halt mehr Code...
          Das Formular beginnt so:
          <form action="<?= $_SERVER[PHP_SELF] ?>" name="profildaten" method="post" onsubmit="return formcheck();">

          Danach folgen die einzelnen Felder in diesem Stil:
          <label id="vorname">Vorname</label><input type="text" name="vorname" value="">

          Hier im HTML-Code sind definitiv keine Fehler.

          Wird das Formular abgeschickt, dann wird dieser Code ausgeführt (externes Javascript):

          function formcheck()
          {
           var vorname = document.profildaten.vorname.value;
           var name = document.profildaten.name.value;
           var geburtsort = document.profildaten.geburtsort.value;
           var geburtsdatum = document.profildaten.geburtsdatum.value;
           var strasse = document.profildaten.strasse.value;
           var plz = document.profildaten.plz.value;

          var ausgefuellt = true;
           var pflichtfelder = new Array( vorname, name, geburtsort, geburtsdatum, strasse, plz );

          for ( i=0; i<pflichtfelder.length; i++ )
           {
            if ( pflichtfelder[i] == "" )
            {
             ausgefuellt = false;
             break;
            }
           }

          if ( !ausgefuellt )
           {
            alert("Es wurden nicht alle Pflichtfelder ausgefüllt");

          document.getElementById("vorname").style.color = "#ff0000";
            document.getElementById("name").style.color = "#ff0000";
            document.getElementById("geburtsort").style.color = "#ff0000";
            document.getElementById("geburtsdatum").style.color = "#ff0000";
            document.getElementById("strasse").style.color = "#ff0000";
            document.getElementById("plz").style.color = "#ff0000";

          return false;
           }
           else
           {
            alert("ok");
            return true;
           }
          }

          Und wenn ich die document.getElementByID("").style.color ... rausnehme, dann funktioniert es auch. Sind die aber drin, dann wird mein Formular gnadenlos in jedem Browser abgeschickt.

          1. Hallo Bastian,

            ersetze mal

            <label id="vorname">Vorname</label><input type="text" name="vorname" value="">

            durch
            <label for="vorname">Vorname</label><input type="text" id="vorname" value="">
            dann sollte es gehen.

            (Ansonsten hast Du zwei Elemente mit id/name = "vorname") und eines davon ist immer gefüllt.)

            Grüße
            Andreas

            --
            "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
            (Rich Cook)
            1. Hi Andreas!

              Nein, leider geht es auch dann nicht. Gleicher Effekt. Mein Formular wird abgeschickt.

              1. Hallo Bastian,

                Nein, leider geht es auch dann nicht. Gleicher Effekt. Mein Formular wird abgeschickt.

                Ich habe es jetzt mal bei mir ausprobiert: Die Meldung kommt, und das Formular wird nicht abgeschickt. Also ist noch irgendwo bei dir ein Fehler drin. Stell das Ganze mal online, damit man es sich mal ansehen kann.

                Grüße
                Andreas

                --
                "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
                (Rich Cook)
  2. Was passiert hier? Der wichtige Code sind diese Zeilen:
    if ( !ausgefuellt )
    {
      document.writeln("Es wurden nicht alle Pflichtfelder ausgefüllt");

    hier überschreibst du das aktuelle Dokument. Je nach Browser passiert irgendetwas.

    Struppi.