Mario Scheidecker: Kann man den unload event irgendwie abbrechen ?

Hallo !

Ich stehe vor folgendem Problem:

Links im Frame ist ein Navigationsbaum, rechts die entsprechenden Formularfelder.
Tippt man was in das Formular, merke ich mir, dass der User was geaendert hat.
Waehlt er nun in der Navigation eine andere Seite an, mache ich ihn mit einem
confirm Dialog darauf aufmerksam, dass er seine Aenderungen noch nicht gespeichert
hat. Nun will ich das er auf der Seite bleibt wenn er OK drueckt. Leider wird nach dem
OK die neu angewaehlte Seite angezeigt und die Aenderungen sind futsch.
Wie kann ich den onUnload event dazu benutzen, das das anwaehlen der neuen Seite
unterbunden wird ?

Fuer jeden Ansatz bin ich dankbar !

CU Mario

  1. Hallo Mario,

    Links im Frame ist ein Navigationsbaum, rechts die entsprechenden Formularfelder.
    Tippt man was in das Formular, merke ich mir, dass der User was geaendert hat.
    Waehlt er nun in der Navigation eine andere Seite an, mache ich ihn mit einem
    confirm Dialog darauf aufmerksam, dass er seine Aenderungen noch nicht gespeichert
    hat. Nun will ich das er auf der Seite bleibt wenn er OK drueckt. Leider wird nach dem
    OK die neu angewaehlte Seite angezeigt und die Aenderungen sind futsch.
    Wie kann ich den onUnload event dazu benutzen, das das anwaehlen der neuen Seite
    unterbunden wird ?

    Prinzipiell würde ich so vorgehen:

    Die Formularseite setzt im Navigationsframe eine Variable auf wahr,
    beim Aufruf eines Linkes wird kontrolliert wahr oder falsch,
    ist sie wahr, dann erfolgt die Abfrage per confirm-Dialog und von dessen Ergebnis machst du die Weiterverarbeitung abhängig: zurück zum Formular bzw. Link laden
    ist sie falsch wird der Link ausgeführt
    nicht vergessen, beim Verlassen
    der Formularseite bzw. beim Absenden die Variable wieder auf 0 setzen.
    Prinzip also: Linkausführung abhängig machen von der Antwort.
    Ich würde das ganze mit onClick lösen, damit auch Leute ohne JS eine Chance haben die Seite zu lesen.

    Viele Grüße
    Antje

    1. Hallo !

      Danke fuer die Antwort... Auf die Idee bin ich auch schon gekommen, aber den Link
      auf eine andere Seite loese ich nicht von der Formularseite aus. Das Problem ist halt
      wenn der Benutzer unmotiviert auf einen anderen Punkt des Navigationstrees klickt
      und damit im Anzeigefenster den unload event ausloest. Ich kann zwar nun eine
      Funktion ausloesen mit confirm etc. aber den eigentlichen unload event kann ich
      nicht mehr verhindern.... 8-(

      Ich kann  zwar ein Flag im Navigationstree machen, ob nicht gespeichert wurde
      und bei jedem Seitenaufruf testen ob das Flag gesetzt ist und entsprechend
      history.back() machen... Aber das ist einfach zu komplex und kaum noch zu
      pflegen......

      Wuerde mir wuenschen es gaebe sowas wie beim onSubmit="return function()"
      Wenn man bei onUnload="return xyz()" machen koennte und man einfach bei
      confirm entsprechend true oder false zurueckgeben koennte waere ich um einige
      Probleme leichter.....

      Also falls trotzdem jemand noch irgendeine Idee hat.....

      BROWSER SUX !

      Mario

      1. Hallo !

        Danke fuer die Antwort... Auf die Idee bin ich auch schon gekommen, aber den Link
        auf eine andere Seite loese ich nicht von der Formularseite aus. Das Problem ist halt
        wenn der Benutzer unmotiviert auf einen anderen Punkt des Navigationstrees klickt
        und damit im Anzeigefenster den unload event ausloest. Ich kann zwar nun eine
        Funktion ausloesen mit confirm etc. aber den eigentlichen unload event kann ich
        nicht mehr verhindern.... 8-(

        Du hast mich nicht verstanden, mein Ansatz funktioniert so:
        beliebigen Link anklicken ---> Javascriptfunktion aufrufen ---> Funktion fragt: Formularseite ja oder nein
        ----> ja: Formular sichern? --->ja Link nicht ausführen
                                    ---> nein Link ausführen
        ----> nein: Link ausführen

        Du brauchst an dieser Stelle das unload gar nicht, weil die Seite eben nicht verlassen wird. Der Funktionsaufruf unterbindet die Linkausführung.

        Diese Funktion kann auf der Navigationsseite stehen, die Formularseite setzt nur beim Laden auf der Navigationsseite eine Variable. Da du ja offensichtlich Frame verwendest, ließ mal nach <../../tecba.htm>

        Viele Grüße
        Antje

        1. Der Tip ist gut ! Das funktioniert natuerlich....

          Muss ich nur noch ins Tree Applet einen Javascriptaufruf einbauen...

          Nochmals Danke !

          CU Mario