jquery jquery-ui-dialog onbeforeunload

Diálogo jQuery UI OnBeforeUnload



jquery-ui-dialog (6)

Esto funciona para mí:

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

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:

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

Y la solución que estoy usando es una publicación here . 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 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.


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

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

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


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 } <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>


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?'' ; });