web-dev-qa-db-de.com

jQuery UI-Dialog OnBeforeUnload

Ich habe ein kleines Problem. Ich versuche, das OnUnLoad-Ereignis des Fensters abzufangen und eine Bestätigungsfrage zu stellen. Wenn der Benutzer beschließt, dass er bleiben möchte, bleibt er in Ordnung und wenn er die Seite verlassen möchte, gehen alle nicht gespeicherten Daten verloren. Hier sind die Probleme ...

Ich verwende ein jQuery-UI-Dialogfeld, und wenn ich den folgenden Code auf meiner Seite platziere, habe ich das Dialogfeld geöffnet. Wenn ich auf die Schaltfläche "Zurück" im Browser klicke, wird die Msgbox nie angezeigt. Es wird nur die Seite aktualisiert:

<script type="text/javascript"> 
    $(window).bind('beforeunload', function() { 
            alert('you are an idiot!'); 
        } 
    );
</script>

Und die Lösung, die ich verwende, war ein Beitrag hier . Wieder wird die msgbox gut angezeigt, wenn der jQuery-UI-Dialog nicht geöffnet ist. Wenn dies der Fall ist, wird die msgbox nicht angezeigt und die Seite wird nur aktualisiert.

Irgendwelche Ideen?

64
clockwiseq

Die korrekte Methode zum Anzeigen der Warnung besteht darin, einfach eine Zeichenfolge zurückzugeben. Rufen Sie die alert()-Methode nicht selbst auf.

<script type="text/javascript">
    $(window).on('beforeunload', function() {
        if (iWantTo) {
            return 'you are an idiot!';
        }
    }); 
</script>

Siehe auch: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

111

Sie können auch eine Ausnahme für das Verlassen der Seite machen, indem Sie ein bestimmtes Formular absenden:

$(window).bind('beforeunload', function(){
    return "Do you really want to leave now?";
});

$("#form_id").submit(function(){
    $(window).unbind("beforeunload");
});
43
Tomáš Mleziva

das funktioniert für mich

$(window).bind('beforeunload', function() {
      return 'Do you really want to leave?' ;
});
14
lndr

Das funktioniert für mich:

window.addEventListener("beforeunload", function(event) {
  event.returnValue = "You may have unsaved Data";
});

1
Nate

die jQuery-API besagt insbesondere, dass sie nicht an beforeunload binden soll, sondern direkt an das Fenster binden sollte. Vorununload stieß ich gerade auf einen ziemlich schlechten Speicher.

1
Thomas

Für ASP.NET MVC, wenn Sie eine Ausnahme für das Verlassen der Seite durch Senden eines bestimmten Formulars festlegen möchten:

Legen Sie eine Formular-ID fest:

@using (Html.BeginForm("Create", "MgtJob", FormMethod.Post, new { id = "createjob" }))
{
  // Your code
}



<script type="text/javascript">

  // Without submit form
   $(window).bind('beforeunload', function () {
        if ($('input').val() !== '') {
            return "It looks like you have input you haven't submitted."
        }
    });

    // this will call before submit; and it will unbind beforeunload
    $(function () {
        $("#createjob").submit(function (event) {
            $(window).unbind("beforeunload");
        });
    });

</script>
0
atik sarker