Wenn Sie hier im Stackoverflow Änderungen vornehmen und versuchen, von der Seite weg zu navigieren, wird eine Javascript-Bestätigungsschaltfläche angezeigt, in der Sie gefragt werden: "Möchten Sie wirklich von dieser Seite weg navigieren?" blee bla bla ...
Hat jemand dies bereits implementiert? Wie kann ich nachverfolgen, ob Änderungen festgeschrieben wurden? Ich glaube, ich könnte das selbst tun, ich versuche, die guten Praktiken von Ihnen, den Experten, zu lernen.
Ich habe Folgendes versucht, funktioniert aber immer noch nicht:
<html>
<body>
<p>Close the page to trigger the onunload event.</p>
<script type="text/javascript">
var changes = false;
window.onbeforeunload = function() {
if (changes)
{
var message = "Are you sure you want to navigate away from this page?\n\nYou have started writing or editing a post.\n\nPress OK to continue or Cancel to stay on the current page.";
if (confirm(message)) return true;
else return false;
}
}
</script>
<input type='text' onchange='changes=true;'> </input>
</body>
</html>
Kann jemand ein Beispiel posten?
javascript
html
message
onbeforeunload
confirm
Shimmy Weitzhandler
quelle
quelle
Antworten:
Update (2017)
Moderne Browser betrachten das Anzeigen einer benutzerdefinierten Nachricht jetzt als Sicherheitsrisiko und wurden daher von allen entfernt . Browser zeigen jetzt nur allgemeine Nachrichten an. Da wir uns nicht mehr um das Einstellen der Nachricht kümmern müssen, ist dies so einfach wie:
Lesen Sie weiter unten, um Unterstützung für ältere Browser zu erhalten.
Update (2013)
Die ursprüngliche Antwort ist für IE6-8 und FX1-3.5 geeignet (auf die wir bereits 2009 abzielten, als sie geschrieben wurde), ist aber jetzt ziemlich veraltet und funktioniert in den meisten aktuellen Browsern nicht mehr - ich bin gegangen es unten als Referenz.
Das
window.onbeforeunload
wird nicht von allen Browsern konsistent behandelt. Es sollte eine Funktionsreferenz und keine Zeichenfolge sein (wie in der ursprünglichen Antwort angegeben), aber das funktioniert in älteren Browsern, da die Prüfung für die meisten von ihnen zu sein scheint, ob etwas zugewiesen istonbeforeunload
(einschließlich einer Funktion, die zurückgibtnull
).Sie haben
window.onbeforeunload
eine Funktionsreferenz festgelegt, aber in älteren Browsern müssen SiereturnValue
das Ereignis festlegen, anstatt nur eine Zeichenfolge zurückzugeben:Sie können das nicht
confirmOnPageExit
überprüfen lassen und null zurückgeben, wenn der Benutzer ohne die Nachricht fortfahren soll. Sie müssen das Ereignis noch entfernen, um es zuverlässig ein- und auszuschalten:Ursprüngliche Antwort (gearbeitet im Jahr 2009)
So schalten Sie es ein:
So schalten Sie es aus:
Denken Sie daran, dass dies kein normales Ereignis ist - Sie können sich nicht wie gewohnt daran binden.
Um nach Werten zu suchen? Das hängt von Ihrem Validierungsrahmen ab.
In jQuery könnte dies so etwas sein (sehr einfaches Beispiel):
quelle
$("#submit_button").click(function() { window.onbeforeunload = null; });
. Ich habe ursprünglich das Onclick-Ereignis der Schaltfläche verwendet, aber es war nicht nur nicht so nett, sondern funktionierte auch nicht mit IE8.window.onbeforeunload
Ereignis jedoch nicht blockieren .Der
onbeforeunload
Microsoft-Ismus kommt einer Standardlösung am nächsten, aber beachten Sie, dass die Browserunterstützung uneinheitlich ist. zB für Opera funktioniert es nur in Version 12 und höher (zum Zeitpunkt des Schreibens noch in der Beta).Für maximale Kompatibilität müssen Sie außerdem mehr tun, als nur eine Zeichenfolge zurückzugeben, wie im Mozilla Developer Network erläutert .
Beispiel: Definieren Sie die folgenden zwei Funktionen zum Aktivieren / Deaktivieren der Navigationsaufforderung (siehe MDN-Beispiel):
Definieren Sie dann ein Formular wie folgt:
Auf diese Weise wird der Benutzer nur dann vor dem Wegnavigieren gewarnt, wenn er den Textbereich geändert hat, und wird nicht aufgefordert, wenn er das Formular tatsächlich sendet.
quelle
Damit dies in Chrome und Safari funktioniert, müssten Sie es so machen
Referenz: https://developer.mozilla.org/en/DOM/window.onbeforeunload
quelle
Mit JQuery ist dieses Zeug ziemlich einfach zu machen. Da kann man an Sets binden.
Es ist NICHT genug, um das Onbeforeunload durchzuführen. Sie möchten die Navigation nur dann auslösen, wenn jemand mit der Bearbeitung von Inhalten begonnen hat.
quelle
jquerys 'beforeunload' hat bei mir super funktioniert
quelle
Für neue Leute, die nach einer einfachen Lösung suchen, versuchen Sie einfach Areyousure.js
quelle
Dies ist eine einfache Möglichkeit, die Nachricht zu präsentieren, wenn Daten in das Formular eingegeben werden, und die Nachricht nicht anzuzeigen, wenn das Formular gesendet wird:
quelle
Um die bereits erstaunliche Antwort von Keith zu erweitern :
Benutzerdefinierte Warnmeldungen
Um benutzerdefinierte Warnmeldungen zuzulassen, können Sie diese in eine Funktion wie die folgende einschließen:
Rufen Sie dann einfach diese Funktion mit Ihrer benutzerdefinierten Nachricht auf:
Navigation wieder aktivieren
So aktivieren Sie Navigation, alles , was Sie tun müssen , ist festgelegt
window.onbeforeunload
aufnull
. Hier ist es, eingewickelt in eine nette kleine Funktion, die überall aufgerufen werden kann:Verwenden Sie jQuery, um dies zu Formelementen zu binden
Wenn Sie jQuery verwenden, kann dies leicht an alle Elemente eines Formulars wie folgt gebunden werden:
Dann, damit das Formular eingereicht werden kann:
Dynamisch modifizierte Formulare:
preventNavigation()
undenableNavigation()
kann nach Bedarf an andere Funktionen gebunden werden, z. B. das dynamische Ändern eines Formulars oder das Klicken auf eine Schaltfläche, die eine AJAX-Anforderung sendet. Dazu habe ich dem Formular ein verstecktes Eingabeelement hinzugefügt:Jedes Mal, wenn ich verhindern möchte, dass der Benutzer weg navigiert, löse ich die Änderung an dieser Eingabe aus, um sicherzustellen, dass sie
preventNavigation()
ausgeführt wird:quelle
Hier versuchen Sie dies, es funktioniert 100%
quelle
Der Standard besagt, dass die Eingabeaufforderung gesteuert werden kann, indem das Ereignis vor dem Herunterladen abgebrochen oder der Rückgabewert auf einen Wert ungleich Null gesetzt wird . Außerdem wird angegeben, dass Autoren Event.preventDefault () anstelle von returnValue verwenden sollten und die dem Benutzer angezeigte Nachricht nicht anpassbar ist .
Ab 69.0.3497.92 hat Chrome den Standard nicht erfüllt. Es gibt jedoch einen Fehlerbericht und eine Überprüfung wird durchgeführt. In Chrome muss returnValue anhand des Ereignisobjekts festgelegt werden, nicht anhand des vom Handler zurückgegebenen Werts.
Es liegt in der Verantwortung des Autors, zu verfolgen, ob Änderungen vorgenommen wurden. Dies kann mit einer Variablen erfolgen oder indem sichergestellt wird, dass das Ereignis nur bei Bedarf behandelt wird.
quelle
Wenn der Benutzer Änderungen am Formular vornimmt, wird ein boolesches Flag gesetzt. Wenn der Benutzer dann versucht, von der Seite weg zu navigieren, aktivieren Sie dieses Flag im Ereignis window.onunload . Wenn das Flag gesetzt ist, zeigen Sie die Nachricht an, indem Sie sie als Zeichenfolge zurückgeben. Wenn Sie die Nachricht als Zeichenfolge zurückgeben, wird ein Bestätigungsdialogfeld mit Ihrer Nachricht angezeigt.
Wenn Sie Ajax zum Festschreiben der Änderungen verwenden, können Sie das Flag auf setzen,
false
nachdem die Änderungen festgeschrieben wurden (dh im Ajax-Erfolgsereignis).quelle
Sie können
onchange
dem Textbereich (oder anderen Feldern) ein Ereignis hinzufügen , das eine Variable in JS festlegt. Wenn der Benutzer versucht, die Seite zu schließen (window.onunload), überprüfen Sie den Wert dieser Variablen und zeigen die Warnung entsprechend an.quelle
alert
undconfirm
werden währendwindow.onbeforeunload
und blockiertwindow.onunload
(zumindest in der Version von Chrome auf meinem PC, aber wahrscheinlich auch in jedem Browser, der diese Handler jemals unterstützt).Basierend auf allen Antworten in diesem Thread habe ich den folgenden Code geschrieben und er hat bei mir funktioniert.
Wenn Sie nur einige Eingabe- / Textbereich-Tags haben, für die ein Onunload-Ereignis überprüft werden muss, können Sie HTML5-Datenattribute als zuweisen
data-onunload="true"
für zB.
und das Javascript (jQuery) kann so aussehen:
quelle
Hier ist mein HTML
Und so habe ich etwas Ähnliches in JavaScript gemacht
quelle
Dies kann einfach durch Setzen eines ChangeFlag auf true im onChange- Ereignis von TextArea erfolgen . Verwenden Sie Javascript, um das Bestätigungsdialogfeld basierend auf dem ChangeFlag- Wert anzuzeigen . Verwerfen Sie das Formular und navigieren Sie zur angeforderten Seite, wenn die Bestätigung true zurückgibt, andernfalls tun Sie nichts .
quelle
Was Sie verwenden möchten, ist das Ereignis onunload in JavaScript.
Hier ist ein Beispiel: http://www.w3schools.com/jsref/event_onunload.asp
quelle
Es gibt einen "onunload" -Parameter für das Body-Tag, von dem aus Sie Javascript-Funktionen aufrufen können. Wenn es false zurückgibt, wird das Wegnavigieren verhindert.
quelle
<body onunload="return false;">
.