DavidB: form.submit() ignoriert onsubmit-values

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

  1. hi,

    die Funktion darf nur einmal abgearbeitet werden

    Dann sorge dafür - setz dir ein Flag.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 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

      1. 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

  2. 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.

    --
    Javascript ist toll (Perl auch!)
    1. 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