Frage

Ich habe ein System, wo ich mit dem Benutzer überprüfen möchten, ob sie sicher sind, dass sie die Seite verlassen wollen, sobald ein schmutziges Flag gesetzt ist.

Ich verwende die folgenden Code - In FireFox, ich auf der Seite Quelle durch FireBug aussehen kann und der Tag richtig hat das onbeforeunload Attribut in ihr eingefügt.

In Chrome und Firefox, dies nicht der Fall, obwohl, und ich bin in der Lage von der Seite zu navigieren weg ganz ohne Vorwarnung. Die jQuery Linie den Body-Tag zu aktualisieren, auf jeden Fall ausgeführt wird, es ist nur die Durchführung es nicht.

if ($("body").attr('onbeforeunload') == null) {
    if (window.event) {
        // IE and Chrome use this
        $("body").attr('onbeforeunload', 'CatchLeavePage(event)');
    }
    else {
        // Firefox uses this
        $("body").attr('onbeforeunload', 'return false;CatchLeavePage(event)');
    }
}

Alle Ideen, wie es weitergehen von hier aus?

War es hilfreich?

Lösung

Sie können nicht Seite Entladen abbrechen durch Rücksendung falsch. Sie müssen String zurückgeben, in einem Meldungsfeld Benutzer angezeigt wird, und er entscheidet, ob er auf der Seite verlassen oder bleiben will (entweder ‚OK‘ oder ‚Abbrechen‘ auswählen), so dass Sie Ihren Code schreiben müssen, wie folgt aus:

 window.onbeforeunload = function() {
    return "Are you sure you want to leave this page bla bla bla?"; // you can make this dynamic, ofcourse...
 };

Andere Tipps

try this

  <script type=\"text/javascript\">
        var dont_confirm_leave = 0; //set dont_confirm_leave to 1 when you want the user to be able to leave withou confirmation
        var leave_message = 'You sure you want to leave?'
        function goodbye(e) 
        {
            if(dont_confirm_leave!==1)
            {
                if(!e) e = window.event;
                //e.cancelBubble is supported by IE - this will kill the bubbling process.
                e.cancelBubble = true;
                e.returnValue = leave_message;
                //e.stopPropagation works in Firefox.
                if (e.stopPropagation) 
                {
                    e.stopPropagation();
                    e.preventDefault();
                }

                //return works for Chrome and Safari
                return leave_message;
            }
        }   
    window.onbeforeunload=goodbye;
    </script>
window.onbeforeunload = function () { return 'Are you sure?' };

Überprüfen Sie diesen Code ein:

var validNavigation = false;

function wireUpEvents() {
var dont_confirm_leave = 0; 
var leave_message = "You sure you want to leave ?";

function goodbye(e) {
if (!validNavigation) {
if (dont_confirm_leave !== 1) {
if (!e) e = window.event;
e.cancelBubble = true;
e.returnValue = leave_message;
//e.stopPropagation works in Firefox.
if (e.stopPropagation) {
e.stopPropagation();
e.preventDefault();
}
//return works for Chrome and Safari
return leave_message;
}
}
}

window.onbeforeunload = goodbye;

document.onkeydown = function () {
switch (event.keyCode || e.which) {
case 116 : //F5 button
validNavigation = true;
case 114 : //F5 button
validNavigation = true;
case 82 : //R button
if (event.ctrlKey) {
validNavigation = true;
}
case 13 : //Press enter
validNavigation = true;
}

}
// Attach the event click for all links in the page
$("a").bind("click", function () {
validNavigation = true;
});

// Attach the event submit for all forms in the page
$("form").bind("submit", function () {
validNavigation = true;
});

// Attach the event click for all inputs in the page
$("input[type=submit]").bind("click", function () {
validNavigation = true;
});
}

// Wire up the events as soon as the DOM tree is ready
$(document).ready(function () {
wireUpEvents();
});

Es ist nicht schön, aber es hat den Trick.

var warnclose = true;
var warn = function(e) {
    var warning = 'Your warning message.';
    if (warnclose) {
        // Disables multiple calls
        warnclose = false;

        // In case we still need warn to be called again 
        setTimeout(function(){
            warnclose = true;
        }, 500);

        return warning;
    }
};
window.onbeforeunload = warn;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top