Was ich erreichen möchte, ist den Benutzer nicht gespeicherter Änderungen zu warnen, wenn er versucht, eine Seite zu schließen oder sich von dieser zu entfernen, ohne vorher zu speichern.OnBeforeUnload wird nur aktiviert, wenn sich die Feldwerte geändert haben
Ich habe es geschafft, den OnBeforeUnload()
Dialog auf Pop-up zu bekommen ... aber ich will nicht, dass es überhaupt angezeigt wird, wenn der Benutzer keine Feldwerte geändert hat. Dazu verwende ich dieses versteckte Eingabefeld is_modified genannt, die mit einem Standardwert von falsch beginnt und Flips zu wahr wenn alle Felder bearbeitet wird.
Ich habe versucht, die Änderung Ereignis zu diesem is_modified Feld zu versuchen und für Wertänderung zu erkennen ... und erst dann aktivieren OnBeforeUnload.
$('#is_modified').change(function() {
if($('#is_modified').val() == 'true')
window.onbeforeunload = function() { return "You have unsaved changes."; }
});
Aber von dem, was ich meine, ist, dass die change()
Ereignis erst nach diesen 3 Schritten arbeitet - ein Feld den Fokus erhält, wird ein Wert geändert und das Feld verliert konzentrieren. Im Falle des versteckten Eingabefeldes bin ich mir nicht sicher, wie dieser empfangende und verlierende Fokus funktioniert! Daher wird die onbeforeunload-Funktion niemals aktiviert.
Kann jemand vorschlagen, einen Trigger über is_modified zu erhalten?
Danke.
"Wahr" ist nicht der richtige Wert. In einigen Browsern (zumindest Firefox, vielleicht mehr), die "Null" zurückgeben, wird der Dialog abgebrochen. Howerver, in IE, konnte ich keine Möglichkeit finden, den Dialog innerhalb des Handlers abzubrechen. Das Einzige, was für mich funktionierte, war, den Handler vollständig vorher zu entfernen (zB "window.beforeunload = null"), wie in Bryan Larsens Antwort. –
Fair genug. Leider habe ich meine Lösung nicht gründlich getestet, bevor ich geantwortet habe. :( –
Ich weiß, ich bin ein wenig zu spät zur Party, aber ich war gerade dabei. Jedoch im IE, wenn die Funktion 'undefined' zurückgibt (oder nichts zurückgibt), wird der Dialog nicht angezeigt funktioniert auch in FF). Ich versuchte, true/false/null zurück und IE würde nur "wahr"/"false"/"null" als Text im Dialogfeld. Keine Ahnung warum. Hoffe das hilft jemand anderen. –