• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

[Javascript] confirm anzeigen bei schliessen des Fensters

  • Ersteller Ersteller Tib
  • Erstellt am Erstellt am

Tib

Boskoop
Registriert
05.09.06
Beiträge
40
Hallo zusammen.

Hab eine Frage über JavaScript:

Ich habe in PHP ein kleines CMS geschrieben, mit einem Editor, wo der Benutzer den Seitentext verändern kann.

Um zu verhindern, dass ungespeicherte Änderungen durch versehntliches Schliessen des Fensters verloren gehen, möchte ich ein confirm-Fenster anzeigen lassen, auf dem bestätigt werden muss, ob man das Fenster wirklich schliessen möchte. Es geht also nicht darum, den User irgendwie davon abzuhalten, meine Site zu verlassen, um dieser Diskussion schon einmal zuvorzukommen.

Ich rufe ich mit beim body per unbeforeunload eine Funktion auf, die ein confirm-Fenster öffnet. Funktioniert alles bestens.
Aber nun wird die bestätigungsmeldung auch angezeigt, wenn ich auf den "Weiter zur Vorschau"-Button klicke. Das will ich ja aber grade nicht.

Hat irgendwer ne Idee, wie man das confirm-Fenster wirklich nur dann anzeigen kann, wenn das Fenster geschlossen wird?

Danke schon mal,
Tibor
 
Du könntest dir eine Hilfsvariable definieren, nennen wir sie z. B. editcomplete, welche du inital auf false setzt. Die confirm-Meldung knüpfst du an eine if-Bedingung editcomplete != true, bzw. !editcomplete, wodurch das Popup nur erscheint, wenn editcomplete nicht auf true gesetzt wurde. Für jeden Link, der bestätigt, dass die Bearbeitung abgeschlossen ist, rufst du eine Funktion auf, welche zunächst editcomplete auf true setzt und dannach die entsprechende Seite aufruft.

Evtl. könntest du auch das Event beim Klick auf den Link überschreiben, z. B. durch die Attribute onclick="window.onbeforeunload=null;", welche du einfach deinem Link oder Submit-Button anhängst. Das ganze natürlich abhängig davon, wie du das Event registrierst, anpassen. Also bei AddEventListener z. B. RemoveEventListener verwenden, oder bei jQuery o. Ä. die entsprechenden Library-Funktionen. Direkt auf window.onbeforeunload sollte zwar generell funktionieren, ist aber nicht die eleganteste Lösung.
 
Zuletzt bearbeitet:
Nur nochmal zur Bestätigung und Ergänzung: Beforeunload wird ausgelöst, wenn die Seite verlassen wird, egal ob das Fenster geschlossen wird oder z.B. eine andere URL eingetippt oder einem Bookmark oder einem Link in Deiner Seite gefolgt wird. Das ist auch sinnvoll, denn ein Fenster-Schließen ist ja nicht der einzige Weg, die Seite (versehentlich) zu verlassen.
Du must aber eben vor jedem gewollten Verlassen der Seite, bei dem auch sichergestellt ist, dass keine Daten verlorengehen werden (typischerweise also bei jedem Submit) den Eventhandler für beforeunload abmelden (typischerweise im onsubmit-Eventhandler).
 
wdominik, gKar, lieben Dank für eure Antworten!

Das Projekt hatte bis jetzt geruht, da ich mit anderen Dingen beschäftigt war.

Hab's heute ausprobiert mit einer Hilfsvariable und es hat wunderbar geklappt!
Beim Klicken auf den Buttons des Formulars, dass zum nächsten/letzten Bearbeitungschritt führt, wird jetzt per onsubmit (im Form-Tag) eine Javascript-Funktion ausgelöst, die die Hilfsvariable auf true setzt. So wird in jedem Fall durch onbeforereload eine Warnmeldung angezeigt ausser in den spezifisch definierten Ausnahmen. Also genau das, was ich wollte! :) Perfekt! Vielen Dank gkar auch noch mal für die genaue Definiton!

Lg Tibor