• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

[Javascript] confirm anzeigen bei schliessen des Fensters

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
 

wdominik

Weißer Winterglockenapfel
Registriert
15.01.10
Beiträge
880
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:

gKar

Maunzenapfel
Registriert
25.06.08
Beiträge
5.362
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).
 

Tib

Boskoop
Registriert
05.09.06
Beiträge
40
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