form.submit() ignoriert onsubmit-values
DavidB
- javascript
Hallo Zusammen,
Ich habe ein etwas komplizierteres PHP-Formular - es wird 2 Mal eingelesen und stellt beim 2.Mal erweiterte Optionen zur Verfügung, die abhängig sind von einer Änderung beim ersten Aufruf.
Um es kurz zu halten habe ich mal das Basisproblem abgewandelt und in eine kleine Datei gepackt, wo man mal testen kann:
_________________________________________________________________
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<script>
function enc_form(formObj) {
alert(formObj.id)
}
</script>
</head>
<body>
<form method="post" id="test" onsubmit="return enc_form(this)">
<input type="Text" name="farbe">
<input type="TEXT" name="as" onchange="document.getElementById('test').submit()">
<input type="submit">
</form>
</body></html>
_________________________________________________________________
Das Problem ist nun folgendes:
Wenn der Wert vom 2. Formularfeld geändert wird, soll das Formular abgeschickt werden, aber vorher noch die Funktionen ausführen, die unter onsubmit="..." des Formulars notiert sind.
Durch einen JS-Aufruf des Submit-Buttons wird das (bei mir) nicht gemacht. Ich könnte jetzt bei Button 2 auch explizit den Befehl geben:
_________________________________________________________________
onchange="this.form.onsubmit();document.getElementById('test').submit()"
_________________________________________________________________
Auch das funktioniert.
Problematisch an der Sache ist, daß ich nicht weiss, ob alle Browser dies so handhaben, die Funktion darf nur einmal abgearbeitet werden und ich würde gerne wissen, wie das Formular-Handling in solchen Fällen definiert ist und ob alle Browser das gleich interpretiern.
Beim Standard weiss ich nicht genau wo ich diesen speziellen Fall nachschlagen soll.
Vielen Dank David
hi,
die Funktion darf nur einmal abgearbeitet werden
Dann sorge dafür - setz dir ein Flag.
gruß,
wahsaga
Dann sorge dafür - setz dir ein Flag.
Ja, danke, das werde ich wahrscheinlich machen müssen.
Ich hatte mir erhofft, daß ich etwas mehr über den Standard erfahre, der hier zuständig ist und evtl. standardkonform statt "ins Blaue hinein" programmieren kann.
Ausserdem wäre natürlich interessant, ob jemand einen Browser findet, der auch ohne die geänderte Zeile schon die Funktion unter onsubmit abarbeitet.
Viele Grüße
David
Ich habe das zu Beginn gepostete Formular nun unter Linux getestet und ein Browser dort (ich glaube es war Konquerer) verhält sich mit einer Einschränkung genauso:
Wird das Formular per JS abgeschickt, wird auch hier die Onsubmit-Funktion nicht ausgeführt. Wird allerdings bei dem auslösenden Element "this.form.onsubmit();" hinzugefügt, wird die Funktion gleich zweimal ausgeführt. Vermutlich wird hier der Zusatz als Deklaration interpretiert - aber das habe ich nicht weiter untersucht.
Auch wenn Netscape 4.7 und MS-IE 4.0 nur durch den Zusatz die Funktion ausführen (und sich somit genauso wie aktuelle Browser verhalten) muss man eventuelle Fehlinterpretationen bei Linux-Browsern also abfangen.
Viele Grüße
David
Das Problem ist nun folgendes:
Wenn der Wert vom 2. Formularfeld geändert wird, soll das Formular abgeschickt werden, aber vorher noch die Funktionen ausführen, die unter onsubmit="..." des Formulars notiert sind.
ich nehme an die Funktion soll die Eingabe prüfen, dann sollte es so gehen:
onchange="if( this.form.onsubmit(this.form) )this.form.submit()"
Wen du die Funktion explizit nicht mehr ausführen willst, dann musst du einfach wahsagas Tipp befolgen und einen Flag setzen.
Struppi.
Hallo Struppi,
onchange="if( this.form.onsubmit(this.form) )this.form.submit()"
Vielen Dank, diese Lösung ist noch etwas besser, weil sie auch von Browsern verstanden wird, die nicht "getElementById" nicht verstehen (4er Generation).
Ausserdem ist die richtige Reihenfolge der Abarbeitung garantiert, wobei das schon ein Bug wäre, wenn das Formular abgesendet würde, bevor die erste Funktion ausgeführt wurde.
Das Flag werde ich dann auch noch einbauen.
Viele Grüße
David