Diálogo jQuery UI OnBeforeUnload

Tengo un pequeño problema. Intento atrapar el evento OnUnLoad de la ventana y hacer una pregunta de confirmación y, si el usuario decide que quiere quedarse, está bien, y si quiere abandonar la página, perderá todos los datos no guardados. Aquí están los problemas …

Estoy usando un diálogo de interfaz de usuario de jQuery y cuando coloco el siguiente código en mi página, tengo el cuadro de diálogo abierto, y cuando hago clic en el botón Atrás en el navegador, nunca aparece el cuadro de mensaje. Simplemente refresca la página:

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

Y la solución que estoy usando es una publicación aquí . Una vez más, el msgbox se mostrará bien si no tengo el cuadro de diálogo de jQuery UI abierto. Si lo hago, entonces no muestra el msgbox y simplemente refresca la página.

¿Algunas ideas?

La forma correcta de mostrar la alerta es simplemente devolver una cadena. No llame al método alert() usted mismo.

  

Ver también: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

También puede hacer una excepción por abandonar la página mediante el envío de un formulario en particular:

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

esto funciona para mí

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

La API de jQuery dice específicamente que no se vincule a beforeunload, y en su lugar debe vincularse directamente a la ventana. Antes de la descarga, me encontré con una memoria bastante mala en parte vinculada a beforeunload con jQuery.

Esto funciona para mí:

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

Para ASP.NET MVC, si desea hacer una excepción para salir de la página mediante el envío de un formulario en particular:

Establezca una ID de formulario:

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