fjh: Formular aus anderem Frame abschicken und OnSubmit

Hallo Forum,

nachdem mir das Archiv nicht weiterhelfen konnte, wende ich mich nun an euch.

Ich verschicke ein Formular, welches sich in Frame B befindet aus Frame A über den Aufruf mit submit(), beim Anklicken einer Grafik (selbstgebastelter Button).
Klappt auch ohne Probleme.

Nun möchte ich aber Formularüberprüfungen vornehmen bevor das Formular abgeschickt wird. Eigentlich auch kein Problem. Über den onSubmit-Event des <form>-Tags rufe ich eine Funktion auf, die z.B. überprüft, ob überhaupt Felder ausgefüllt sind und je nachdem true oder false zurückgibt. Dies funktioniert aber nur, wenn ich das über einen submit-Button mache, der im selben Frame wie auch das Formular (also im Formular selbst) steht.

Schicke ich das Formular aus dem anderen Frame ab, wird scheinbar der event-Handler onSubmit nicht _vor_ dem Abschicken ausgeführt, wie es eigentlich sein sollte.
Das Formular wird ohne Überprüfung abgeschickt.

Natürlich kann und habe ich auch bereits eine Funktion gebaut, die beim Klick auf den Button aufgerufen wird, die Überprüfungen durchführt und _danach_ eben erst den submit ausführt. Also das Ganze ohne den Weg über den onSubmit-Eventhandler. Ich benötige aber aus verschiedenen anderen Gründen nun die obige Variante und hoffe mir kann jemand von euch weiterhelfen.

Ist dies ein grundsätzliches Problem und gibt es eine Lösung? Mit einem setTimeout komme ich ja nicht dazwischen..

Vielen Dank im voraus
Franz-Josef

  1. Hi,

    Nun möchte ich aber Formularüberprüfungen vornehmen bevor das Formular abgeschickt wird. Eigentlich auch kein Problem. Über den onSubmit-Event des <form>-Tags rufe ich eine Funktion auf, die z.B. überprüft, ob überhaupt Felder ausgefüllt sind und je nachdem true oder false zurückgibt. Dies funktioniert aber nur, wenn ich das über einen submit-Button mache, der im selben Frame wie auch das Formular (also im Formular selbst) steht.

    Du hast also etwa <form onSubmit="return check();">, richtig? Ändere das doch mal auf self.check(). Ich hab's nicht getestet, kann mir aber denken, daß es daran liegt.

    Cheatah

    1. Hallo,

      Du hast also etwa <form onSubmit="return check();">, richtig? Ändere das doch mal auf self.check(). Ich hab's nicht getestet, kann mir aber denken, daß es daran liegt.

      nützt leider auch nix.

      Ich habe mal eine kleine Testseite hochgespielt.

      http://www.fmi.uni-konstanz.de/~herpersf/test/testframe.htm

      Dort sieht man ganz anschaulich, daß es nicht funktioniert.
      Schickt man das Formular aus dem linken Frame mittels "Suchen"-Button ab, ohne etwas ins Textfeld einzutragen, wird sofort das Formular abgeschickt (das perlscript gibts natürlich nicht, sodass eine Fehlermeldung zurückkommt). Mittels des Submit Button neben dem Textfeld funktioniert die vorherige Kontrolle, ob etwas ins Textfeld eingetragen wurde. Es öffnet sich ein alert. Erst danach wird das Formular abgeschickt.

      Tja, und nu? Mir fällt absolut nix ein, hoffentlich jemandem von euch.
      Wie gesagt Alternativlösungen mit anderem Ansatz habe ich, ich benötige genau diese Lösung mit Aufruf der check-Funktion über den onSubmit-Eventhandler.

      Ciao
      Franz-Josef

      1. Hallo Franz-Josef,

        Tja, und nu? Mir fällt absolut nix ein, hoffentlich jemandem von euch.
        Wie gesagt Alternativlösungen mit anderem Ansatz habe ich, ich benötige genau diese Lösung mit Aufruf der check-Funktion über den onSubmit-Eventhandler.

        Alternative: Verwende click() und damit klickst du denn submit-Button an, dann klappt es auch. Was du willst ist ein fensterübergreifender Event und das ist schwer möglich.

        Versuche also:parent.formframe.document.testform.Submit.click();

        Viele Grüße

        Antje

        1. Hallo Antje,

          Alternative: Verwende click() und damit klickst du denn submit-Button an, dann klappt es auch. Was du willst ist ein fensterübergreifender Event und das ist schwer möglich.

          Versuche also:parent.formframe.document.testform.Submit.click();

          Für das konstruierte Beispiel funktioniert das natürlich, aber den Submit-Button habe ich ja nur hinzugefügt, damit man testen kann, daß es damit funzt. "In echt" soll der natürlich nicht dasein. Sonst weiß ja keiner welchen Button anklicken ;-)

          Hintergrund ist, daß ich bevor das Formular abgeschickt wird, im Formularframe die Seite noch beschreiben will mit einer Meldung wie "Bitte haben Sie Geduld, Suchanfrage wird bearbeitet". Dies klappt im IE problemlos, indem ich per Klick auf den Suchen-Button (in einem anderen Frame als das Formular befindlich) eine Funktion aufrufe, die zuerst die Überprüfungen durchführt, per submit() das Formular abschickt und dann mit document.write die Meldung schreibt bzw. eine neue Datei mit der Meldung lädt. Geht beides.
          Im NS geht beides aber nicht. Die Seite wird zwar geladen, aber irgendwie wird nix submitted. Auch setTimeout nützt nichts. Außer man setzt ihn so hoch, daß die Ergebnisseiten vor der Meldung da sind. Scheint so zu sein, dass der NS den Frame für das Ergebnis sperrt.
          Aber auch daran liegts nicht. Denn eine unelegantere Lösung funktioniert: Auslesen der Formularfelder mit JS, zusammenbasteln der URL mit QueryString, Meldung einblenden und per location.href die URL zuweisen. Das ganze ist allerdings viel Code und ich hätte das gerne anders gelöst. Z.B. über den EventHandler OnSubmit, der ja angeblich _vor_ dem Abschicken ausgeführt wird.

          Deswegen verstehe ich auch nicht ganz was du mit frameübergreifender Event meinst. Wenn ich ein Formular aus einem anderen Frame abschicke, dann müßte doch der Event eintreten. Von wo ich das Formular abschicke ist doch egal. Ich kann ja auch von dem anderen Frame auf einen Button klicken und dann den EventHandler OnClick auslösen. Wo ist der Unterschied?

          Also: was ich _eigentlich_ will ist eine Lösung für den Netscape, die es ermöglicht, direkt nach dem submit eine Seite einzublenden. Dachte halt über OnSubmit wärs möglich.

          Hier mal die URL des Projekts zur Ansicht. Falls jemand sich die Mühe machen möchte.
          http://isubkn.ub.uni-konstanz.de:8080/htm-fjh/rech/gesamt.htm
          Im JS-Code steht die oben beschriebene Notlösung unter viel viel anderes Unausgegorenes <g>.
          Achja und bis jetzt nur für 4er Browser!

          Gruss
          Franz-Josef

          1. Hallo Franz-Josef

            manchmal sieht man den Wald vor lauter Bäumen nicht :-)
            Die Lösung deines Problemes

            Also: was ich _eigentlich_ will ist eine Lösung für den Netscape, die es ermöglicht, direkt nach dem submit eine Seite einzublenden. Dachte halt über OnSubmit wärs möglich.

            Schreibe eine zusätzlich Funktion, die du vom anderen Frame aus aufrufst:
            Etwa so:
            function los()
               {if (check())
               {document.testform.submit();self.location.href='seite.htm';
            }

            Dein Problem lag übrigens nicht in der Verwendung über mehrere Frames, sondern in der Verwendung von submit() selbst. Der ignoriert anscheinend Angaben die im Formtag zu onsubmit stehen. Man muß also vorher die Funktion check(), die was ausführen so aufrufen oder eben im Anschluß an submit etwas ausführen lassen.

            Viele Grüße

            Antje