3 Stimmen

jQuery, onBeforeUnload und ASP.Net-Formular

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?

1voto

James Ellis-Jones Punkte 2922

Es ist eine Vermutung, aber Sie haben nicht die herkömmliche Antikonfliktvorrichtung, die wie folgt funktioniert (function ($) { code here })(jQuery); also könnte es einen Konflikt mit der jQuery-Definition von "$" geben, der die Ausführung der Ausnahme stoppen würde, die Ihr Code macht, wenn jemand zurückmeldet.

0voto

Prateek Deshpande Punkte 215

Ich stimme mit James überein. Meistens kommt es zu dieser Art von Konflikten. Ich werde mit noConflict() vorschlagen. Viel Spaß beim Codieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X