Volker: Kein Submit möglich

Hallo,

es ist eine scheinbar einfache Sache, doch scheitere ich daran: Auf einer Website existiert ein Formular mit einem abschließenden Submit-Button. Daneben steht ein Link mit einem onclick-Eventhandler. Klickt man den Link an, soll eine Javascript-Routine neben einigen anderen Sachen auch das Formular absenden. Leider scheitere ich daran.

Zum besseren Verständnis, hier der Code:

<html>
    <head>
        <title>Test</title>

<script type="text/javascript">
            <!--
            function AbGehts() {
              document.Testform.submit();
            }
            -->
        </script>
    </head>
    <body>
        <form name="Testform" action="testauswertung.php" method="post">
            <input type="text" size="40" name="Feld"><br>
            <input type="submit" name="senden" value="abschicken">
            <a href="" onclick="AbGehts();">oder hier</a>
        </form>

</body>
</html>

Nach meinem Verständnis müßte sowohl der Submit-Button als auch die JS-Routine das Formular an die Datei "testauswertung.php" weiterreichen. Im Fall des Submit-Buttons geschieht dieses auch. Der Klick auf den Link führt jedoch nur zum Refresh des Formulars.

Freue mich auf Hinweise, wo mein Denkfehler (oder Codierungsfehler) liegt.

Grüße,
Volker

  1. Hi,

    <form name="Testform" action="testauswertung.php" method="post">
                <input type="text" size="40" name="Feld"><br>
                <input type="submit" name="senden" value="abschicken">
                <a href="" onclick="AbGehts();">oder hier</a>
            </form>

    Nach meinem Verständnis müßte sowohl der Submit-Button als auch die JS-Routine das Formular an die Datei "testauswertung.php" weiterreichen. Im Fall des Submit-Buttons geschieht dieses auch. Der Klick auf den Link führt jedoch nur zum Refresh des Formulars.

    ja, da kommt es zu einem Konflikt, weil du mit dem Klicken dieses Links zwei Aktionen anstößt: Das Absenden des Formulars, und das übliche Verfolgen des Links. Beides impliziert das Laden einer neuen Ressource - beim Submit ist es testform.php, beim Link das aktuell geladene Dokument nochmal. Browserabhängig, welche Aktion als erste durchgeführt wird.

    Freue mich auf Hinweise, wo mein Denkfehler (oder Codierungsfehler) liegt.

    Verhindere im onclick-Handler die Standardreaktion auf das Ereignis, indem du den Eventhandler false zurückgeben lässt.

    Ciao,
     Martin

    --
    why the heck do you jerk think, that wir ein doppelposting nicht bemerken, wenn you zwischendurch the sprache wechselst?
      (wahsaga)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. hi,

    es ist eine scheinbar einfache Sache, doch scheitere ich daran: Auf einer Website existiert ein Formular mit einem abschließenden Submit-Button. Daneben steht ein Link mit einem onclick-Eventhandler.

    onSubmit() gehört in den form-Tag. Guck mal:

    http://rolfrost.de/cgi-bin/jdate.cgi

    Ist JS aktiviert -> Ajax, ansonsten submit.

    Hotti

    1. Hi,

      es ist eine scheinbar einfache Sache, doch scheitere ich daran: Auf einer Website existiert ein Formular mit einem abschließenden Submit-Button. Daneben steht ein Link mit einem onclick-Eventhandler.

      onSubmit() gehört in den form-Tag. Guck mal:

      Um onsubmit geht es doch überhaupt nicht.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  3. Hi,

    <a href="" onclick="AbGehts();">oder hier</a>

    Nach meinem Verständnis müßte sowohl der Submit-Button als auch die JS-Routine das Formular an die Datei "testauswertung.php" weiterreichen.

    Das geschieht auch, auch bei Nutzung des Links.

    Der Klick auf den Link führt jedoch nur zum Refresh des Formulars.

    Falsch. Es wird testauswertung.php aufgerufen UND das Formular refresht.

    Nach dem onclick (der per Javascript das Formular abschickt) wird (da kein return false) das href beachtet. Das heißt, daß die relative URL aufgerufen wird. Und die zeigt nunmal auf das Formular ...

    Die Antwort von testauswertung.php zeigt der Browser natürlich nicht an, da ja längst für dieses Fenster eine andere Seite requested wurde (das Formular selbst).

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  4. Mahlzeit Volker,

    <a href="" onclick="AbGehts();">oder hier</a>

    Siehe Zitat 2002: Wenn Du ganz offensichtlich nirgendwohin verweisen möchtest, wieso missbrauchst Du dann an dieser Stelle ein <a>-Element?

    Nach meinem Verständnis müßte sowohl der Submit-Button als auch die JS-Routine das Formular an die Datei "testauswertung.php" weiterreichen. Im Fall des Submit-Buttons geschieht dieses auch. Der Klick auf den Link führt jedoch nur zum Refresh des Formulars.

    Falsch. Beim Klicken wird das Formular abgeschickt (das kannst Du verifizieren, indem Du z.B. in Deiner Datei "testauswertung.php" mal irgendeine Form von Logging aktivierst) - anschließend jedoch wird dem Link gefolgt. Und ein leerer Link könnte vom Browser z.B. als "dann lade halt einfach die aktuelle Seite nochmal neu" interpretiert werden ... Du müsstest also dem Link seine eigentliche Funktionalität nehmen. Erheblich sinnvoller wäre natürlich, erst gar keinen Link zu verwenden, wenn Du nirgendwohin verweisen willst.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo EKKi,

      Falsch. Beim Klicken wird das Formular abgeschickt (das kannst Du verifizieren, indem Du z.B. in Deiner Datei "testauswertung.php" mal irgendeine Form von Logging aktivierst) - anschließend jedoch wird dem Link gefolgt. Und ein leerer Link könnte vom Browser z.B. als "dann lade halt einfach die aktuelle Seite nochmal neu" interpretiert werden ... Du müsstest also dem Link seine eigentliche Funktionalität nehmen. Erheblich sinnvoller wäre natürlich, erst gar keinen Link zu verwenden, wenn Du nirgendwohin verweisen willst.

      Danke für die Erklärung - das hilft. Ich war (fälschlich) davon ausgegangen, daß der Browser nach Übermitteln des Formulars keine weitere Aktion ausführt, also nicht versucht, dem Link im a-Tag noch zu folgen. Tatsächlich läßt sich dieses durch ein im Onclick angefügtes "return false;" vermeiden. Tja, war wohl mal wieder ein typischen Anfängerfehler...

      Grüße,
      Volker

      1. Moin,

        Danke für die Erklärung - das hilft. Ich war (fälschlich) davon ausgegangen, daß der Browser nach Übermitteln des Formulars keine weitere Aktion ausführt, also nicht versucht, dem Link im a-Tag noch zu folgen. Tatsächlich läßt sich dieses durch ein im Onclick angefügtes "return false;" vermeiden. Tja, war wohl mal wieder ein typischen Anfängerfehler...

        Deswegen schrieb ich ja:
        onSubmit="return false" in den Form-Tag
        und den Submit Button mit onClick() belegen wie hier. Auf den a-Tag kannst Du verzichten, Du hast dann nur noch _einen_ Button und der macht entweder JS (sofern aktiviert) oder Submit.

        Hotti

  5. hi,

    <a href="" onclick="AbGehts();">oder hier</a>

    a-tag als button? _Immer_ ein return false ins onclick, um die Linkreaktion zu stoppen.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.