Kein Submit möglich
Volker
- javascript
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
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
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
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
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
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
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
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
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