Mounir Benzid: Wie löse ich ein onSubmit Event per Methode "submit()" aus?

Was ich eigentlich vorhabe ist so simpel, und trotzdem sitze ich schon
seit zwei Tagen dran. Und das nur weil Netscape einfach nichts mit der
Änderung der target Eigenschaft eines Formulars anfangen kann.

Es folgt eine Beispiel aus selfhtml und anschließend, daß was nur im ie5
funzt. Bitte helft mir bei einer Lösung für den nn4.x !!!!

Änderung/Setzen der target Eigenschaft eines Formulars laut S. Münz:

---------------------------------------------
<script language="JavaScript">
  function Ziel()
  {
   document.Testform.target = "unten";
   return true;
  }
</script>

<form name="Testform" action="/cgi-bin/testform.pl"
  onSubmit="return Ziel()">
  <input type=text size=40 name="Eingabe">
  <input type=submit value="Absenden">
</form>
---------------------------------------------

Ich brauche aber *unbedingt* folgendes:

<script language="JavaScript">
  function Ziel(f)
  {
   var rememberTarget = f.target;
   f.target = "unten";
   f.submit();
   f.target = rememberTarget;
   return true;
  }
</script>

<form name="Testform" action="/cgi-bin/testform.pl" target="default">
  <input type=text size=40 name="Eingabe">
  <a href javascript:Ziel(this.form)>Absenden</a>
</form>

---------------------------------------------

M.a.W : Target des Formulars merken --> dann ändern --> Ergebnis im
neuen Ziel anzeigen --> Formular target wieder auf default setzten
im ie5 no problem. Im nn4.7 wird das Ergebnis  trotzdem wieder im "default"-Frame dargestellt.

Mounir sacht Danke!

  1. Sorry , ich hab mich im Subject vertan.
    Es geht eigentlich um das Verbiegen der target Eigenschaft eines Formulars.

    Mo

  2. <script language="JavaScript">
      function Ziel(f)
      {
       var rememberTarget = f.target;
       f.target = "unten";
       f.submit();
       f.target = rememberTarget;

    return true;

    lass das mal weg. (Bei mir steht bei sowas hinterher immer true im Fenster)

    }
    </script>

    <form name="Testform" action="/cgi-bin/testform.pl" target="default">
      <input type=text size=40 name="Eingabe">
      <a href javascript:Ziel(this.form)>Absenden</a>

    <a href="javascript:Ziel(document.Testform);">Absenden</a>

    Der Netscape scheint hier einen anderen Kontext für "this" zu haben, das Formular  ist es
    jedenfalls nicht mehr.

    </form>

    ob das mit dem Target-verbiegen dann klappt weiss ich nicht. Aber der Funktionsaufruf
    funktioniert so schon mal.

    Gruss,
    Carsten

    1. lass das mal weg. (Bei mir steht bei sowas hinterher immer true im Fenster)

      Ich hab's raus gelassen...

      Der Netscape scheint hier einen anderen Kontext für "this" zu haben, das Formular  ist es
      jedenfalls nicht mehr.

      und document.Testform in die function  reingeschrieben,
      damit unterwegs wirklich nichts verloren geht.

      ob das mit dem Target-verbiegen dann klappt weiss ich nicht. Aber der Funktionsaufruf
      funktioniert so schon mal.

      Tja, das ist das eigentliche Problem. Ich hab in diesem Zusammenhang
      irgenwo mal was von  <a href="#"></a> onSubmit=".." gelesen. Ich glaub
      sogar in Selfhtml. Eben im chat hatte das auch jemand gemeint .
      Weist Du vielleicht wo?

      yep tnx erstmal!

      gr
      mo

      1. hi mo,

        irgenwo mal was von  <a href="#"></a> onSubmit=".." gelesen.

        ???

        ich kenn bloß:

        <a href="#" onClick="Ziel();">Absenden</a>

        es soll Probleme mit Netscape geben, die das umgeht, ich weiss aber nicht so recht welche.
        (Es würde auf jeden Fall auch verhindern, das der Rückgabewert von Ziel() hinterher im Fenster steht.)
        Ausprobieren kann nicht schaden, aber obs hilft?

        Gruss,
        Carsten

        1. ich kenn bloß:

          <a href="#" onClick="Ziel();">Absenden</a>

          Genau!!!!!!!!!!!!!!!!!!!!!!! Es geht JUBEL!!!!!!!!!!
          Aaahhhhh! Endlich. Nach 4 Tagen endlich die Erlösung !

          Carsten super :-)))))))))))))))))))))

          Mich wundert aber, daß <a href="#"> überhaupt einen Sinn macht für den Browser!
          Was passiert dabei?
          Egal, ich kann jetzt erstmal ruhig pennen gehen!

          gr
          Mo

          -------------------------------------------------------------------------------------------
          Ach ja, wenn's Dich  interessiert hier der html-code:

          <html>
            <head>
            <title>Frame-Test</title>
            <script LANGUAGE=javascript>
              function wegDamit() {
                var rememberTarget = document.test.target;
                document.test.target = "rechts";
                document.test.submit();
                alert ("Target neu: " + document.test.target);
                alert ("Target alt: " + rememberTarget);
                document.test.target = rememberTarget;
              }
            </script>
            </head>
            <body>
            <form name="test" action="/cgi-bin/test-cgi" target="links">
              <input type=submit value="Klick per submit!">
              <a href="#" onClick="wegDamit()">Ab geht's per Methode</a>
            </form>
            </body>
          </html>
          

          1. Hi Mounir,

            Mich wundert aber, daß <a href="#"> überhaupt einen Sinn macht für den Browser!
            Was passiert dabei?

            Ich stell mir das immer so als html "this" vor, also als Verweis auf sich selber.
            Das # bezeichnet ja normalerweise einen Anker innerhalb der Seite. Hier ist nun keine Seite
            angegeben->also bleibts innerhalb der Seite, es ist auch kein Ziel angegeben->also ganz oben.

            Übrigens klasse, dass du dein Ergebnis gepostet hast, da kommt für (Mit)Leser doch gleich viel
            mehr 'Kompaktwissen' rüber.

            Gruss,
            Carsten

            1. Moin Carsten!

              Hmm ärger ärger!!!! Da gibt es wohl doch noch ein Problem!
              Du erinnerst Dich vielleicht an die beiden alert-Fenster,
              die ja nur zu Debug-Zwecken aufgerufen werden?
              Laß die Fenster weg und schon funktioniert es nicht mehr :-(
              Javascript == Javashit ehrlich.

              Ich denke, daß man noch einen Timer (= wait()) einbauen muß,
              um die Synchronisation zwischen Browser und Script zu erreichen!

              Aber gibt so was wie ein wait() in js?
              Mann o mann! Das kann doch nicht wahr sein, daß es nicht mehr klappt wenn
              man die Fenster wegläßt!!!

              Was meinst Du?

              gr
              Mo

              1. Hi Mo,

                Javascript == Javashit ehrlich.

                volle Zustimmung.

                Aber gibt so was wie ein wait() in js?

                heisst setTimout(); und wartet nicht sondern führt Code Verzögert aus.

                setTimeout("alert('oh Mann')",1000); // nach 1 sec oh Mann anzeigen

                der Ausdruck innerhalb des setTimout(); wird erst nach dem Timout ausgewertet, das kann
                Ärger geben (=> sonst wärs kein JS)  wenn lokale Variable zu diesem Zeitpunkt nicht mehr gültig sind.

                also

                function warten(dauer)
                {
                    w=1;
                    setTimeout("w=0;",dauer);
                    while(w)
                        ;
                }

                Blockiert das Fenster natürlich total, aber zum Testen ob es das überhaupt ist, sollte es reichen.

                Gruss,
                Carsten

                1. Blockiert das Fenster natürlich total, aber zum Testen ob es das überhaupt ist, sollte es reichen.

                  Komischerweise wird das Fenster überhaupt nicht blockiert.

                  Was jetzt nicht mehr klappt, ist das Zurücksetzen des targets auf
                  "links". Das heisst das Result wird auch per submit-Button _immer_
                  im rechten Frame gesetzt. Akuter Haarverlust droht!!!!

                  gr
                  Mo

                  -----------------------------------------------
                  <html>
                    <head>
                    <title>Frame-Test</title>
                    <script LANGUAGE=javascript1.2>

                  function warten(dauer) {
                        w=1;
                        setTimeout("w=0;",dauer);
                        while(w)
                        ;
                      }

                  function wegDamit() {
                        var rememberTarget = document.test.target;

                  document.test.target = "rechts";

                  document.test.submit();

                  warten(1000);

                  // Zurücksetzen !!!!!
                        document.test.target = rememberTarget;

                  }

                  </script>
                    </head>

                  <body>
                    <form name="test" action="/cgi-bin/test-cgi" target="links">
                      <input type=submit value="Ab nach links!">
                      <a href="#" onClick="wegDamit()">Ab nach rechts!</a>
                    </form>
                    </body>
                  </html>

                  1. Hi mo,

                    Also bei mir wartete das warten ewig......
                    (einmal rechts, dann nie wieder links)

                    folgendes geht: (NN4.73)

                    <script LANGUAGE=javascript1.2>

                    var  rememberTarget;

                    function wegDamit()
                    {
                    rememberTarget = document.test.target;

                    document.test.target = "rechts";  
                    
                    document.test.submit();  
                    
                    // Zurücksetzen   
                    setTimeout("document.test.target = rememberTarget;",1000);  
                    

                    }

                    </script>

                    rememberTarget muss global sein, da die Funktion zum Zeitpunkt wo
                    "document.test.target = rememberTarget; evaluiert wird schon beendet ist.
                    Gefallen tut mir das mit dem Timeout nicht. (Geht das auch auf einem 486/100 ?)

                    Plan B: setz doch einfach das target im "Links" Fall auf links:

                    <input type=submit value="Ab nach links!" onClick="document.test.target ='links';">

                    Gruss,
                    Carsten

                    1. So, ich glaub, das ist jetzt das non-plus-ultra. Es funktioniert bei
                      5 von 8 Klicks auf den "Ab nach rechts!"-Button :-(

                      Carsten ich danke Dir sehr für Deine Zeit & Hilfe, aber das Problem
                      läßt sich anscheinend nicht mit vernünftigem Aufwand lösen.

                      Ich muß auf irgendeinen dirty hack zurückgreifen,
                      den man spätestens nach 3 Tagen selber nicht mehr versteht

                      Ja, da kommt richtig Freude auf!!!!

                      Vielleicht bis zum nächsten Mal!

                      gr
                      mo

                      ----------------------------------------------------
                      <html>
                        <head>
                        <title>Frame-Test</title>

                      <script LANGUAGE=javascript1.2>

                      function warten(dauer) {
                            w=1;
                            setTimeout("w=0;",dauer);
                            while(w)
                            ;
                          }

                      function wegDamit() {

                      document.test.target = "rechts";

                      document.test.submit();

                      }

                      </script>
                        </head>

                      <body>
                        <form name="test" action="/cgi-bin/test-cgi" target="links">
                          <input type=submit value="Ab nach links!" onClick="document.test.target ='links';">
                          <a href="#" onClick="wegDamit();warten(100000)">Ab nach rechts!</a>
                        </form>
                        </body>
                      </html>

                      1. Hi mo,

                        so _schnell_ wird nicht aufgegeben :)
                        hab jetzt nicht so viel zeit daher nur mal folgendes:

                        <html>
                          <head>
                          <title>Frame-Test</title>
                        <script LANGUAGE=javascript1.2>

                        function wegDamit(ziel)
                        {
                        document.test.target = ziel;

                        document.test.submit();  
                        

                        }

                        </script>

                        </head>

                        <body>
                          <form name="test" action="script.php3" target="links">
                            <input type=text value="papadappes" size=30 name="txt">
                        <input type=button value="Ab nach links" onClick="wegDamit('links');">
                            <a href="#" onClick="wegDamit('rechts')">Ab nach rechts!</a>
                          </form>
                          </body>
                        </html>

                        Erklärung was es sein könnte später..... mehr als 5 versuche hat es überlebt

                        Carsten

                        1. Hi Mounir,

                          das scheint jetzt zu laufen, mit IE5/98 NN4.72/98 NN4.01a/95 keine Probleme mehr, auch bei mehreren
                          zehn versuchen.

                          Vermute, mal das mein Vorschlag mit dem onClick im <submit> richtig schlecht war:
                          Was wird zuerst ausgeführt? Oder beides gleichzeitig? Oder mal das eine früher, mal
                          das andere? (diesen eindruck macht es zumindest)

                          Hoffentlich gehts auch bei dir,

                          frohes _weiter_coden,

                          Carsten