jQuery UI Dialog OnBeforeUnload

Ho un piccolo problema. Sto tentando di catturare l’evento OnUnLoad della finestra e di porre una domanda di conferma e se l’utente decide di voler rimanere, quindi va bene, e se vogliono lasciare la pagina, perderanno tutti i dati non salvati. Ecco i problemi …

Sto usando una finestra di dialogo dell’interfaccia utente jQuery e quando inserisco il seguente codice sulla mia pagina, ho aperto la finestra di dialogo, e quando faccio clic sul pulsante Indietro sul browser, non si apre mai il menu msgbox. Aggiorna semplicemente la pagina:

 $(window).bind('beforeunload', function() { alert('you are an idiot!'); } );  

E la soluzione che sto usando era un post qui . Di nuovo, msgbox verrà visualizzato correttamente se non ho la finestra di dialogo dell’interfaccia utente jQuery aperta. Se lo faccio, quindi non visualizza il msgbox e semplicemente aggiorna la pagina.

Qualche idea?

Il modo corretto per visualizzare l’avviso è semplicemente restituire una stringa. Non chiamare personalmente il metodo alert() .

  

Vedi anche: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

Puoi anche fare un’eccezione per uscire dalla pagina inviando un particolare modulo:

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

questo funziona per me

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

jQuery API dice specificatamente di non eseguire il bind a beforeunload, e invece dovrebbe collegarsi direttamente al window.onbeforeunload, ho appena trovato una memoria piuttosto scadente in parte a causa del binding a beforeunload con jQuery.

Questo funziona per me:

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

Per ASP.NET MVC se vuoi fare un’eccezione per uscire dalla pagina inviando un particolare modulo:

Imposta un ID modulo:

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