André Laugks: confirm() Abrechen

Hallo!

Irgendwie versuche ich mich gerade an JavaScript. Naja, ich habe mir für mein Kontaktformular eine Abfrage zusammen gefrickel. Diese Abfrage soll vor dem Abschicken des Formulars den Besucher noch einmal fragen ob die Emailadresse richtig geschrieben ist! Einige sind wirklich zu blöd, sie richtig zu schreiben. Wenn der Besucher auf Absenden klick, erscheint das "Confirmfenster", "Ist die Emailadresse --Emailadresse-- richtig?". Wenn ich jetzt aber auf Abrechen klicke, wird das Formular trotzdem abgeschickt!
Ich weiss nicht woran es liegt. Ich nehme an, das ich irgendetwas vergessen habe, falsch geschrieben habe. Ich kann den Fehler aber nicht finden!

<script language="JavaScript">
<!--
function richtig() {
confirm("Ist diese Emailadresse " + document.emailrichtig.email.value + " richtig?");

}
-->
</script>

<FORM NAME="emailrichtig" ACTION="http://cgi.netcologne.de/cgi-bin/formmail.d" METHOD="POST">

<!--andere Textfelder-->

<INPUT TYPE="text" NAME="email" value=" " SIZE=30 style="width:350px" id="dimittel">

<!--andere Textfelder-->

<INPUT TYPE="submit" VALUE="Absenden" onclick="richtig()">
<INPUT TYPE="reset" VALUE="Löschen">
</FORM>

  1. Hallo André

    <script language="JavaScript">
    <!--

    »»  function richtig() {
    »»  confirm("Ist diese Emailadresse " + document.emailrichtig.email.value + " richtig?");

    }
    -->
    </script>

    <FORM NAME="emailrichtig" ACTION="http://cgi.netcologne.de/cgi-bin/formmail.d" METHOD="POST">

    <!--andere Textfelder-->

    <INPUT TYPE="text" NAME="email" value=" " SIZE=30 style="width:350px" id="dimittel">

    <!--andere Textfelder-->

    <INPUT TYPE="submit" VALUE="Absenden" onclick="richtig()">
    <INPUT TYPE="reset" VALUE="Löschen">
    </FORM>

    Hast Du es auch mit onSubmit im <form>-Tag probiert? (onCLick dann unten weglassen!)

    Bis danndann

    PAF (patrickausfrankfurt)

    1. Hallo Patrick!

      Hast Du es auch mit onSubmit im <form>-Tag probiert? (onCLick dann unten weglassen!)

      Ich habe  onSubmit="richtig()" in den Form Tag geschrieben und das onclick weg gelassen, trotzdem keine Besserung. Naja..., währe auch der HIT, wenn mein erstes kleines JS futzt. Vielleicht sollte ich mir einige Kapitel noch mal intensiver durchlesen.

      André

  2. Hallo !

    Er darf das Formular nur abschicken, wenn "confirm()" true zurückliefert. In Deinem Beispiel wird ja auf jeden Fall der SUBMIT-Button geklickt, der per se Formulardaten abschickt. Versuchs mal so:

    <script language="JavaScript">
    <!--

    »»  function richtig() {
      if(confirm("Ist diese Emailadresse " + document.emailrichtig.email.value + " richtig?"))
            {
                document.emailrichtig.submit();
            }

    }
    -->
    </script>
    <FORM NAME="emailrichtig" ACTION="http://cgi.netcologne.de/cgi-bin/formmail.d" METHOD="POST">

    <!--andere Textfelder-->

    <INPUT TYPE="text" NAME="email" value=" " SIZE=30 style="width:350px" id="dimittel">

    <!--andere Textfelder-->

    <INPUT TYPE="BUTTON" VALUE="Absenden" onclick="richtig()">

    <!-- TYPE=BUTTON genügt, da das Formular vom JavaScript abgeschickt wird... -->

    <INPUT TYPE="reset" VALUE="Löschen">
    </FORM>

    So müßte das laufen...

    1. Hallo Holger!

      <script language="JavaScript">
      <!--
      »»  function richtig() {
        if(confirm("Ist diese Emailadresse " + document.emailrichtig.email.value + " richtig?"))
              {
                  document.emailrichtig.submit();
              }
      }
      -->
      </script>

      <INPUT TYPE="BUTTON" VALUE="Absenden" onclick="richtig()">

      <!-- TYPE=BUTTON genügt, da das Formular vom JavaScript abgeschickt wird... -->

      <INPUT TYPE="reset" VALUE="Löschen">
      </FORM>

      Dieses Script funktioniert.

      Ich möchte aber nicht das Formular über JavaScript abschicken. Wenn also kein JavaScript eingestellt ist, soll das Formular trotzdem abgeschcikt werden können.

      Wenn ich das nun also so schreiben,

      <INPUT TYPE="submit" VALUE="Absenden" onclick="richtig()">

      geht es in die Hose. Also das Abrechen am "Confirmfenster" funktioniert wieder nicht, das Formular wird trotzem abgeschickt.

      André

      1. Hi,

        absolut ungetestet, völlig aus der Luft gegriffen, könnte aber richtig sein:

        <INPUT TYPE="submit" VALUE="Absenden" onclick="return richtig()">

        Kleine Änderung, große Wirkung - die Basis der Chaostheorie :-)

        Cheatah

        1. Hallo Cheatah!

          <INPUT TYPE="submit" VALUE="Absenden" onclick="return richtig()">

          Kleine Änderung, große Wirkung - die Basis der Chaostheorie :-)

          Das Chaos geht weiter. Das gibt es doch nicht. Ich wältze das JavaScript Buch hin und her! naja...., vielleicht hat ja einer noch eine Lösung!?

          André

      2. <script language="JavaScript">

        Ich möchte aber nicht das Formular über JavaScript abschicken. Wenn also kein JavaScript eingestellt ist, soll das Formular trotzdem abgeschcikt werden können.

        Ich weiß nicht, ob ich Dich mißverstehe... wie soll etwas über eine JavaScript-Funktion abgefragt werden, wo es auch mit abgeschaltetem JavaScript funktionieren soll ??? ;-) Erscheint mir irgendwie ein wenig paradox...

        1. Hallo Holger!

          Ich weiß nicht, ob ich Dich mißverstehe... wie soll etwas über eine JavaScript-Funktion abgefragt werden, wo es auch mit abgeschaltetem JavaScript funktionieren soll ??? ;-) Erscheint mir irgendwie ein wenig paradox...

          Ich meine das so, wenn jemand kein JavaScript eingestellt hat, soll man das Formular trotzdem verwenden können. Den gibt es eben keine Überprüfung. Die javaScript Befehle werden dann also einfach ignoriert!

          Wenn ich das so schreibe, <INPUT TYPE="BUTTON" VALUE="Absenden" onclick="richtig()"> wie Du es vorgeschlagen hast, funktioniert es ohne Probleme. Wenn jetzt aber jemand ohne eingeschaltetem JavaScript auf die Homepage kommt, kann er das Formular nicht abschicken, wegen <INPUT TYPE="Button"..........>.

          Na gut, starte ich eine Abfrage, ob JavaScript eingeschaltet ist, aber das finde ich hier etwas überfrieben, wegen einer Emailadresse, eine Abfrage zu starten und zwei Seiten zu bauen.

          André

          1. Ich meine das so, wenn jemand kein JavaScript eingestellt hat, soll man das Formular trotzdem verwenden können. Den gibt es eben keine Überprüfung. Die javaScript Befehle werden dann also einfach ignoriert!

            Dann müsste es so funktionieren, wie der letzt schrieb...

  3. Hi,

    nach dem ganzen Hin und Her... versuch es doch einfach so:

    <script language=JavaScript>
      <!--
      document.write('<form>...</form>'); // das komplette Formular, wie es bei aktivem JS funktioniert
      // -->
    </script>
    <noscript>
      <form>..</form> <!-- eine Version ohne JavaScript-Abfrage -->
    </noscript>

    Um es "sauber" zu gestalten, solltest Du allerdings das gesamte Formular sowohl im JavaScript- als auch im noScript-Teil definieren.

    Cheatah

    1. Hallo Cheatah!

      <script language=JavaScript>
        <!--
        document.write('<form>...</form>'); // das komplette Formular, wie es bei aktivem JS funktioniert
        // -->
      </script>
      <noscript>
        <form>..</form> <!-- eine Version ohne JavaScript-Abfrage -->
      </noscript>

      Um es "sauber" zu gestalten, solltest Du allerdings das gesamte Formular sowohl im JavaScript- als auch im noScript-Teil definieren.

      Ich habe mir schon eine Umleitung für JavaScript und nicht JavaScript überlegt!
      Sollte kein JavaScript eingeschaltet sein, kommt meta http-equiv="refresh" zum Einsatz. Ist JavaScript eingeschaltet bzw. versteht der Browser das, kommt das JavaScript zum Einsatz.

      -meta http-equiv="refresh" nach 3 Sekunden
      -JavaScript-Funktion nach 1 Sekunde

      <HEAD>

      <meta http-equiv="refresh" content="3; URL=kontakt.htm">

      <script language="JavaScript">
      <!-- vor alten Browsern verstecken

      function laden() {
        location.href = "js_kontakt.htm";
      }

      // -->
      </script>
      </HEAD>
      <BODY onload="setTimeout('laden()', 1000)">

      <A HREF="kontakt.htm">Wenn gar nichts geht</A>

      </BODY>

      Christine ihr Beispiel funktioniert jetzt aber ohne Probleme. Trotzdem nochmals vielen Dank!

      André

  4. Hallo,

    nach den vielen Vorschlaegen, die alle was Wahres aber  augenscheinlich auch immer irgendwo einen kleinen Schoenheitsfehler hatten, setzte ich am besten ganz oben bei der urspruenglichen Frage auf.

    Mach's mal so:

    <script language="JavaScript">
      <!--
      function richtig() {
        return confirm("Ist diese Emailadresse " + document.emailrichtig.email.value + " richtig?");
      }
      -->
      </script>

    <FORM NAME="emailrichtig" ACTION="cgi-bin/formmail.d" METHOD="POST"   onsubmit="return richtig()">
      <INPUT TYPE="text" NAME="email" value=" " SIZE=30 style="width:350px" id="dimittel">
      <INPUT TYPE="submit" VALUE="Absenden">
      <INPUT TYPE="reset" VALUE="Löschen">
      </FORM>

    Prinzip:

    • beim Absenden des Formulars - oder besser gesagt, in dem Moment, in dem das Absenden
        ausgeloest wird  (onsubmit) wird die Funktion richtig() aufgerufen.
    • Je nach Antwort des Benutzers bei confirm() gibt diese Funktion true oder false zurueck.
    • Dieser Wert wird gleich "weitergereicht" an das Form-Objekt (return richtig()),
        false verhindert dabei das Abschicken
        Einschub (Ihr wisst schon, ich zitiere manchmal Dokus <g>):
              You can use the onSubmit event handler to prevent a form from being submitted;
              to do so, put a return statement that returns false in the event handler.
              Any other returned value lets the form submit. If you omit the return statement,
              the form is submitted.
    • Ohne JavaScript faellt das alles weg, Form wird eben einfach abgeschickt, so wie gewollt

    Probier aus, sollte klappen.

    Gruss
    Christine

    1. Hallo Christine!

      Probier aus, sollte klappen.

      Es funktioniert ohne Probleme, Danke!

      Schön das Du wieder an Bord bist!

      André

      PS: Nochmals Danke an allen anderen, die auf meine Frage hin gepostet haben!