Ich verwende kein AJAX, wollte aber dennoch verhindern, dass die Seite mit ungespeicherten Änderungen verlassen wird. Ich habe die meisten der vorherigen Vorschläge ausprobiert, einschließlich navigateAway. Keiner von ihnen funktionierte mit IE 8. NavigateAway gab immer eine Länge von 0 zurück.
Ich fand einen Blog auf, die Lösung über die Verwendung von Klasse als ID in Tag und dann Einstellung Boolesche auf der Grundlage dieser hatte. Ich habe das ausprobiert, aber es funktioniert nicht, weil .NET bei der Ausgabe des HTML-Tags das Eingabe-Tag in ein span-Tag mit der darin deklarierten Klasse einwickelt. Meine endgültige Lösung bestand darin, das Wort Ignore in den ID-Namen des Tags einzufügen. Um zu verhindern, dass onbeforeunload aufgerufen wird, bevor der Klick durch den Code, der den Booleschen Wert setzt, eingefangen wird, muss man außerdem asp:Button oder asp:Input verwenden. Schließlich erzwingt asp (von VS IDE), dass der Startname der Typ des Steuerelements ist; ID="Button_Save". Die Verwendung von asp: Tags verhindert auch, dass onbeforeunload zweimal aufgerufen wird.
<script type="text/javascript" language="javascript">
var stuffchanged = false
var ignorenavigate = false
$(document).ready(function () {
//Detect whether the event source has "nonavigate" class specified
$("a,input,img,checkbox,button").click(function () {
var str = $(this).attr("ID");
ignorenavigate = str.search("Ignore") > 0;
});
});
window.onbeforeunload = confirmExit;
function confirmExit() {
if (stuffchanged && !ignorenavigate) {
return "You have attempted to leave this page with unsaved changes. If you have made any changes to the fields without " +
"clicking the Save button, your changes will be lost. Are you sure you want to exit this page?";
}
}
function textchanged() {
stuffchanged = true;
}