• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> 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