Jürgen Havel: Unterschiedliches Verhalten einer Funktion

Hallo,

hätte jemand Geduld, mir folgendes Problem zu erklären?
Bei einem nicht laufenden Programm stellte sich als Knackpunkt die im Folgenden
extrahierte Stelle heraus.

Beobachtung: Wenn man die Funktion fass() mit der Inline-Referenz anspricht,
erscheinen nacheinander wie erwartet die beiden Alertfenster.

Spricht man "fass()" aber mit dem Eventhandler "onSubmit" an, erscheint nur das erste
Fenster, das mit "setTimeout" verzögerte dagegen nicht.

Wie ist es möglich, daß die Funktion sich unterschiedlich verhält, wenn sie auf
verschiedene Weisen angesprochen wird? Daß sie überhaupt angesprochen wird beweist
ja das erste erscheinende Alertfenster, und ich hätte gedacht, daß sie dann stets
in gleicher Weise durchläuft.

Wenn man sie statt dessen mit einem Button und "onClick" anstelle eines Submitknopfes
und "onSubmit" anspricht, geht es. Aber es würde mich einfach interessieren, warum es mit
onSubmit nicht funktioniert.
Benutze Windows 2000 und IE6 auf Pentium II 400

Grüße von Jürgen
//////////////////////////////////////////////////

<html>
<head>
<title>Geht nicht</title>
<SCRIPT type=text/javascript>

function fass()
{
alert("Schwierige");
setTimeout("alert('Frage')",1000);
}

</SCRIPT>
</head>

<body>

<form name="arg" onSubmit='fass()'>
<input type="text" name="stich">
<input type="submit" value="abschicken">
</form>
<a href="javascript:fass()">Link zu "fass()"</a>

</body>
</html>

  1. function fass()
    {
    alert("Schwierige");
    setTimeout("alert('Frage')",1000);
    }

    warum das so ist kann ich dir leider nicht sagen!
    drehe die funktionsaufrufe um, dann gehts!(musst die zeitverzögerung ggf erhöhen).
    also so:

    function fass()
     {
     setTimeout("alert('Frage')",1000);
     alert("Schwierige");
     }

    1. function fass()
      {
      alert("Schwierige");
      setTimeout("alert('Frage')",1000);
      }
      warum das so ist kann ich dir leider nicht sagen!
      drehe die funktionsaufrufe um, dann gehts!(musst die zeitverzögerung ggf erhöhen).
      also so:

      function fass()
      {
      setTimeout("alert('Frage')",1000);
      alert("Schwierige");
      }

      Nee, umgedreht wird auch nur das nicht verzögerte Alertfenster
      geöffnet. Ist aber egal, laufen tut es jetzt mit einem Button, hätte nur gerne gewußt, was dahintersteckt.

      Jürgen

  2. Spricht man "fass()" aber mit dem Eventhandler "onSubmit" an, erscheint nur das erste
    Fenster, das mit "setTimeout" verzögerte dagegen nicht.

    Naja, onsubmit heißt nach dem abschicken des Formulares, d.h. die Seite ist gar nicht mehr vorhanden.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Spricht man "fass()" aber mit dem Eventhandler "onSubmit" an, erscheint nur das erste
      Fenster, das mit "setTimeout" verzögerte dagegen nicht.

      Naja, onsubmit heißt nach dem abschicken des Formulares, d.h. die Seite ist gar nicht mehr vorhanden.

      Struppi.

      Heißt das, daß die Seite durch "onSubmit" neu geladen wird, auch wenn keine method und keine action definiert werden? Und daß durch die geringste Verzögerung (1 ms reicht nämlich schon) die Funktion durch diesen Neuaufbau der Seite abgebrochen wird?

      Jürgen

      1. Bitte nicht komplett alle zitieren, lass nur das stehen worauf sich deine Antwort bezieht, danke.

        Naja, onsubmit heißt nach dem abschicken des Formulares, d.h. die Seite ist gar nicht mehr vorhanden.

        Heißt das, daß die Seite durch "onSubmit" neu geladen wird, auch wenn keine method und keine action definiert werden? Und daß durch die geringste Verzögerung (1 ms reicht nämlich schon) die Funktion durch diesen Neuaufbau der Seite abgebrochen wird?

        Das ist jetzt widersprüchlich, was genau ein Submit macht, wenn du keine submit Aktion festlegst, weiß ich jetzt nicht genau, aber warum nutzt du den submit Handler, wenn es keine Submitaktion gibt?

        die zweite Frage: kommt darauf an, wenn du eine Aktion festlegst wird der Server nicht innerhalb 1ms antowrten, d.h. die Funktion wird höchst wahrscheinlich noch ausgeführt, aber ansonsten wird die Funktion abgebrochen, da die Seite, inkl. aller Skripte, neu geladen wird, ja.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Das ist jetzt widersprüchlich, was genau ein Submit macht, wenn du keine submit Aktion festlegst, weiß ich jetzt nicht genau, aber warum nutzt du den submit Handler, wenn es keine Submitaktion gibt?

          --
          Das Submit war noch drin, weil ich das eigentliche Programm mal
          einen anderen Zweck hatte. Ich bin dann nur wegen dieses Unterschieds daran hängen geblieben.
          > die zweite Frage: kommt darauf an, wenn du eine Aktion festlegst wird der Server nicht innerhalb 1ms antowrten, d.h. die Funktion wird höchst wahrscheinlich noch ausgeführt, aber ansonsten wird die Funktion abgebrochen, da die Seite, inkl. aller Skripte, neu geladen wird, ja.
          --
          Das wird es sein, denn die Sache läuft offline, also sehr schnell.
          Danke, Jürgen
          1. Das ist jetzt widersprüchlich, was genau ein Submit macht, wenn du keine submit Aktion festlegst, weiß ich jetzt nicht genau, aber warum nutzt du den submit Handler, wenn es keine Submitaktion gibt?

            *g* jetzt hast du den Anhangtrenner (zwei Minuszeichen) reingebaut, damit wird das gesagte von dir nicht mehr zitiert. Lass einfach die Zeichen weg durch das vorangestellte » werden schon Zitate von deinen Aussagen getrennt.

            Nur eine Anmerkung auch eine Seite die von deinen Rechner braucht Zeit, bei mir immer länger als eine Millisekunde.

            Struppi.

            --
            Javascript ist toll (Perl auch!)