Ich habe die folgende Lösung, um zu verhindern, dass die Benutzer meine Registrierungsseite versehentlich verlassen:
var warning = true;
function CheckExit() {
if (warning) {
return "Changes done. Remember to save, blah blah.";
}
}
window.onbeforeunload = CheckExit;
addToPostBack = function (func) {
var old__doPostBack = __doPostBack;
if (typeof __doPostBack != 'function') {
__doPostBack = func;
} else {
__doPostBack = function (t, a) {
if (func(t, a)) old__doPostBack(t, a);
}
}
};
$(document).ready(function () {
$('#aspnetForm').submit(function () {
warning = false;
return true;
});
addToPostBack(function (t, a) {
warning = false;
return true;
});
});
Die meisten dieser Code ist aus verschiedenen Fragen hier auf StackOverflow, und funktioniert ganz gut auf meine lokale Debugging-Seite; alle ASP.Net-Steuerelemente (Linkbuttons, Schaltflächen) können ohne eine Warnung angeklickt werden, aber sobald der Benutzer versucht, das Fenster zu schließen oder weg navigieren, wird die Warnung angezeigt.
Bei der Bereitstellung auf meinem Server wird die Warnung jedoch auch angezeigt, wenn ich auf ASP.Net-Steuerelemente klicke (und ich möchte den Benutzer wirklich nicht warnen, dass seine Änderungen nicht gespeichert werden, wenn er auf die Schaltfläche "Speichern" klickt). Nun, es gibt einen Unterschied zwischen meiner lokalen Debugging-Seite und dem Server: der Server verwendet eine andere MasterPage mit einigen Anzeigen darin, aber nach dem Debuggen mit Firebug (siehe nächster Absatz), kann ich nicht sehen, wie das einen Unterschied machen sollte.
Ich habe versucht, verschiedene Teile des Javascript-Codes mit Firebug auszuführen, um zu bestätigen, dass alles korrekt geladen wird (meine erste Vermutung war, dass der Abschnitt mit $('#aspnetForm') nicht geladen wurde, da dies der Unterschied zu sein scheint), aber es gibt überhaupt keine Verbesserung. Die Warnung erscheint immer noch bei jedem Klick auf einen Link oder eine Schaltfläche.
Mein Hauptproblem ist, glaube ich, dass ich nicht ganz verstehe, was die addToPostBack-Funktion tut, und als solche, ich kann nicht richtig debuggen es.
Hat jemand hier eine Idee, was falsch sein könnte?