2011-01-24 18 views
20

tengo esta pequeña pieza de código:¿Cómo deshabilitar la acción de descarga previa cuando el usuario envía un formulario?

<script> 
$(window).bind('beforeunload', function() { 
    $.ajax({ 
    async: false, 
    type: 'POST', 
    url: '/something' 
    }); 
    }); 
</script> 

Me pregunto, ¿cómo podría desactivar esta solicitud cuando el usuario pulsa el botón de enviar.

Básicamente algo así como aquí, en SO. Cuando haces una pregunta y decides cerrar la página, obtienes una ventana de advertencia, pero eso no ocurre cuando envías el formulario.

Respuesta

34

llamada unbind usando el manejador de beforeunload evento:

$('form#someForm').submit(function() { 
    $(window).unbind('beforeunload'); 
}); 

Para evitar que la forma de ser presentado, agregue la siguiente línea:

return false; 
+0

añadir la siguiente línea: 'return false; ', pero donde puedo añadir esa línea? – Kiquenet

15

Uso

$('form').submit(function() { 
    window.onbeforeunload = null; 
}); 

Asegúrese tener esto antes de la función de envío principal! (Si lo hay)

+0

para mí esto funcionó, mientras que la respuesta de Jacob Relkin no – tObi

0

Esto es lo que usamos:

En el documento listo llamamos a la función beforeunload.

$(document).ready(function(){ 
    $(window).bind("beforeunload", function(){ return(false); }); 
}); 

Antes de cualquier envío o ubicación.reload destrabamos la variable.

$(window).unbind('beforeunload'); 
formXXX.submit(); 

$(window).unbind("beforeunload"); 
location.reload(true); 
0

Buscando Detectar onbeforeunload para la aplicación web ASP.NET así era, tengo para mostrar mensaje de advertencia si algunos cambios de control de entrada en la página utilizando ASP.NET con páginas principales y páginas de contenido. Estoy usando 3 marcadores de posición de contenido en la página principal y la última es la forma después de

<form runat="server" id="myForm"> 

así que después de cierre de la etiqueta y antes de la etiqueta de cierre cuerpo utiliza este script

<script> 
     var warnMessage = "Save your unsaved changes before leaving this page!"; 
     $("input").change(function() { 
      window.onbeforeunload = function() { 
       return 'You have unsaved changes on this page!'; 
      } 
     }); 
     $("select").change(function() { 
      window.onbeforeunload = function() { 
       return 'You have unsaved changes on this page!'; 
      } 
     }); 
     $(function() { 
      $('button[type=submit]').click(function (e) { 
       window.onbeforeunload = null; 
      }); 
     }); 
    </script> 

beforeunload doesn No funciona de manera confiable de esta manera, en lo que respecta al enlace. Debe asignarlo de forma nativa

, así que lo puse en funcionamiento como este enlace y desvinculación no funcionó para mí también Con jQuery 1.7 en adelante, la API del evento se ha actualizado, .bind() /. Unbind() todavía están disponibles para compatibilidad con versiones anteriores, pero el método preferido es usar las funciones on()/off().

0
<!DOCTYPE html> 
<html> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
    <script type="text/javascript" src="http://cdn.jsdelivr.net/jquery.dirtyforms/2.0.0-beta00006/jquery.dirtyforms.min.js"></script> 
    <script type="text/javascript"> 
    $(function() { 
     $('#form_verify').dirtyForms(); 
    }) 
    </script> 
    <title></title> 
<body> 
<form id="form_verify" action="a.php" method="POST"> 
    Firt Name <input type="text"> 
    Last Name <input type="file"> 
    <input type="submit"> 
</form> 

+1

https://github.com/snikch/jquery.dirtyforms –

Cuestiones relacionadas