PapaW: atomatischen Submit unterbinden

Hallo Helfer,

ich habe ein einfaches Formular mit nur einem Eingabefeld und dieses soll vor dem Submit geprüft werden - soweit alles kein Problem...

Leider bekomme ich meine Fehlermeldung und der return false wird ausgeführt und dann auch noch der SUBMIT !!!
Füge ich einfach nur ein zweites Inputfeld in das Formulat ein, so wird der Submit nicht ausgeführt.

Ist das schon jemandem aufgefallen ???

Und was noch wichtiger ist - wie kann ich das unterbinden ???

Danke für Eure zahlreichen Antworten...

Ciao PapaW

  1. hallo. Vielleicht magst Du ja einmal Deinen JS-Validator posten und ein snipplet Deines FORM-Codes.

  2. Hallo PapaW,

    du stehst ganz schön im Stress, hm? :o)

    ich habe ein einfaches Formular mit nur einem Eingabefeld und dieses soll vor dem Submit geprüft werden - soweit alles kein Problem...

    Leider bekomme ich meine Fehlermeldung und der return false wird ausgeführt und dann auch noch der SUBMIT !!!

    Wenn der return false wird und der Submit submitted wird, dann handelt sich's meistens um irgendwelche Javascript-, PHP-, ASP-, JSP-, Perl- oder sonstige Scriptprobleme. HTML doesn't sumit a thing.

    Ich persönlich kann mir beim besten Willen unter deiner Fehlerbeschreibung nichts vorstellen - ausser, dass beim Anklicken eines Submit-Buttons nicht das passiert, was passieren sollte. Das mag an meiner Ahnungslosigkeit liegen; ich habe aber den argen Verdacht, dass du vielleicht doch noch etwas besser beschreiben könntest, was da los ist und vielleicht auch ein bisschen was von deinem Code verraten, um zu erreichen, dass diejenigen, die hier antworten, dir vielleicht etwas zielgerichteter helfen können, dein Problem zu lösen. :o)

    Atme doch einfach mal tief durch und versuch's nochmal, ja?

    File Griese,

    Stonie

    1. Hallo Stonie,

      ich probier es einfach noch einmal...

      du stehst ganz schön im Stress, hm? :o)

      Nicht wirklich Stress - eher genervt...

      Zum testen ein komplettes Script.

      *****
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

      <html>
      <head>
       <title>Test</title>
       <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
       <meta name="author" content="Peer Wermuth">
      </head>

      <script language="JavaScript">
      <!--
      function PrepareAction( action )
      {
       document.forms[0].dfExecuteAction.value = action;
       sButton = document.forms[0].dfExecuteAction.value;
       if( IsPlausibel() )
       {
        document.forms[0].submit();
       }
      }

      function IsPlausibel(  )
      {
       if( document.forms[0].dfTest.value.length < 9 )
       {
        alert(  "Fehler: Die Eingabe muss 9-stellig sein." );
        document.forms[0].dfTest.focus();
        return false;
       }

      return true;
      }
      //-->
      </script>

      <body onload="document.forms[0].dfTest.focus();" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidht="0" marginheight="0">
      <form name="formular1" action="test1.htm" method="get">
      <input type="Hidden" name="dfExecuteAction" value="NoAction">
      <table width="100%" border="0" cellspacing="0" cellpadding="1">
       <tr>
        <td align="right">Mein Testfeld: </td>
        <td><input type="Text" name="dfTest" value="" size="12" maxlength="9"></td>
       </tr>
       <!---
       <tr>
        <td align="right">Mein zweites Testfeld: </td>
        <td><input type="Text" name="dfTest2" value="voll" size="12" maxlength="9"></td>
       </tr>
       //--->
       <tr>
        <td align="right"> </td>
        <td><a href="javascript:PrepareAction( 'Find' )">Suchen</a></td>
       </tr>
      </table>
      </form>
      </body>
      </html>
      *****

      Das Ganze unter test1.htm speichern und zum einen (a) nur "Enter" drücken und die "action" wird ausgeführt - ohne einen bewussten SUBMIT. Über "Suchen" (b) läuft die Prüfung und bei richtiger Eingabe auch die "action" (siehe URL).
      Dann einfach einmal die zweite Eingabe aktivieren und Test a und b erneut durchführen.
      Bei a) passiert bei mir nichts, sprich keine "action" und das will ich auch bei nur einem Eingabefeld im Formular.

      War das besser erklärt ?

      Gruß PapaW

      1. Hi,

        auf die Gefahr hin Dich zu schocken: der Code - exakt so wie Du ihn gepostet hast, also mit nur einem Input), allerdings mit entferntem Doctype - macht bei mir unter IE 5.5, NS 4.6, Mozilla 1.0 und Opera 6 exakt das was er soll - eine Alert-Box kommt hoch, es geschieht kein Submit (außer wenn ich ne 9-stellige Zahl eingebe - da gibt's keine Aler-Box, dafür nen Submit) - so soll es doch sein, oder? Mit welchem Browser macht das denn bei Dir Ärger? Macht es immer noch Ärger, wenn Du den Doctype entfernst? Und: wenn Du den Doctype drin lässt, den Validator bemühst, seinen Hinweisen folgst und dann valides HTML hast - macht es dann immer noch Ärger?

        Grüße,

        Utz

        1. Hi Utz und alle anderen Leser,

          auf die Gefahr hin Dich zu schocken...

          passiert... ;-)

          ...allerdings mit entferntem Doctype...

          warum das ?

          ...macht bei mir unter IE 5.5, NS 4.6, Mozilla 1.0 und Opera 6 exakt das was er soll...

          bei mir mit NS 4.7 oder IE 5.5 nicht...

          Ich habe den Eindruck, ich muss mein Problem noch einmal schildern und vereinfachen. Das mit dem JavaScript funktioniert definitiv und deshalb ist es im neuen Beispiel draussen.
          Bitte speichert einfach nur den Inhalt in einer test_forum.htm und ruft diese auf... und dann wird mit "ENTER" (und das ist mein Problem) ein Submit ausgeführt wie in der URL zu sehen ist (bei Feldinhalten).
          Entfernt Ihr die Kommentare für das zweite Feld, so wird bei "ENTER" nicht mehr SUBMIT ausgeführt (URL) und es kommt bei eingeschalteten Lautsprechern und Sound ein Error-Pieps (oder so was).

          Und das ist mein Ziel. Ich will den automatischen SUBMIT bei nur einem Formularfeld unterbinden.

          Hoffe mich jetzt 100pro verständlich gemacht zu haben...

          Wieder schon im Vorfeld Danke für Eure Mühen und Tips.

          Gruss PapaW

          *****
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

          <html>
          <head>
           <title>Test</title>
           <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
           <meta name="author" content="Peer Wermuth">
          </head>

          <body onload="document.forms[0].dfTest.focus();">
          <form name="formular1" action="test_forum.htm" method="get">
          <table width="100%" border="0" cellspacing="0" cellpadding="1">
           <tr>
            <td align="right">Mein Testfeld: </td>
            <td><input type="Text" name="dfTest" value="" size="12" maxlength="9"></td>
           </tr>
           <!---
           <tr>
            <td align="right">Mein zweites Testfeld: </td>
            <td><input type="Text" name="dfTest2" value="voll" size="12" maxlength="9"></td>
           </tr>
           //--->
          </table>
          </form>
          </body>
          </html>
          *****

          1. Hi,

            Und das ist mein Ziel. Ich will den automatischen SUBMIT bei nur einem Formularfeld unterbinden.

            So, hoffentlich hab ich's jetzt endlich verstanden. Ich konnte nachvollziehen was Du meinst...und identifizieren woran es liegt: an <body onload="document.forms[0].dfTest.focus();"> - nimmst Du den onload raus, geht der Submit ohne Eintrag nicht mehr, ganz so, als sei der Kommentar weg. Er geht erst wieder, wenn das Feld mindestens einmal angeklickt wurde. Erklärung dazu (selber zusammengereimt, daher mit Vorsicht zu genießen): Jedes sichtbare Formularelement muss mindestens einmal den Focus gehabt haben, bevor Submit über Enter funktioniert (denn erst dann hat der virtuelle Submit-Button den Focus und kann durch Enter "gedrückt" werden). Wenn Du ein zweites Feld hast, hast Du ja das zweite Feld, das den Focus _nicht_ automatisch bekommen hat --> kein Submit. Lösung: keine, wenn onload="....focus()" drin bleiben muss. Also wäge ab, was Dir wichtiger ist...

            Grüße,

            Utz

            1. Nochmal ich...

              Lösung: keine, wenn onload="....focus()" drin bleiben muss. Also wäge ab, was Dir wichtiger ist...

              Das war Quatsch, es gibt natürlich doch ne Lösung, ziemlich einfach sogar:

              <form [...] onsubmit="PrepareAction( 'Find' );">

              Damit wird Dein Prüfscript auf jeden Fall aufgerufen, auch wenn das Formular mit Enter submittet wird.

              Grüße,

              Utz