Frage

Ist es möglich, ein benutzerdefiniertes Bestätigungsfeld für das OnbeFeforeUnload -Ereignis in einem Browser zu erstellen? Ich habe es versucht, aber dann bekomme ich 2 Bestätigungsboxen (eine von mir, was nichts weiter als Rückkehr bestätigt ... und dann den Standard aus dem Browser).

Im Moment sieht mein Code aus wie:

var inputChanged = false;

$(window).load(function() {
    window.onbeforeunload = navigateAway;
    $(':input').bind('change', function() { inputChanged = true; });
});

function navigateAway(){
    if(inputChanged){
        return 'Are you sure you want to navigate away?';
    }
}

Ich benutze JQuery dafür.

War es hilfreich?

Lösung

window.onbeforeunload = function (e) {
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }

  // For Safari
  return message;
};

Bitte beachten Sie: Die meisten Browser setzen diese Nachricht nach einem anderen Text. Sie haben keine vollständige Kontrolle über den Inhalt des Bestätigungsdialogs.

Andere Tipps

Nein, Sie können den Standard aus dem Browser nicht vermeiden. Alles, was Sie tun können, ist, einen benutzerdefinierten Text in den Einsatz zu bringen. Wenn Sie den folgenden Ereignishandler verwenden (registriert den Prototyp Lib Way):

Event.observe(window, "beforeunload", function(event) {
    if (showMyBeforeUnloadConfirmation)
        event.returnValue = "foo bar baz";
});

(und showMyBeforeUnloadConfirmation ist wahr) Sie erhalten die Standardbestätigung des Browsers mit dem folgenden Text:

Sind Sie sicher, dass Sie von dieser Seite weg navigieren möchten?

Foo Bar Baz

Drücken Sie OK, um fortzufahren, oder stornieren, um auf der aktuellen Seite zu bleiben.

OK] [Abbrechen

Ich hatte das gleiche Problem, ich konnte ein eigenes Dialogfeld mit meiner Nachricht erhalten, aber die Probleme, mit denen ich konfrontiert war, waren:

  1. Es gab eine Nachricht zu allen Navigationen und ich wollte es nur für Klick.
  2. Mit meiner eigenen Bestätigungsnachricht, wenn der Benutzer "Abbrechen" auswählt, wird das Dialogfeld des Browser -Standarddialogs immer noch angezeigt.

Im Folgenden finden Sie den Lösungscode, den ich gefunden habe, den ich auf meiner Master -Seite geschrieben habe.

function closeMe(evt) {
    if (typeof evt == 'undefined') {
        evt = window.event;
    }
    if (evt && evt.clientX >= (window.event.screenX - 150) && evt.clientY >= -150 && evt.clientY <= 0) {
        return "Do you want to log out of your current session?";
    }
}

window.onbeforeunload = closeMe;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top