2009-12-29 10 views
13

¿Cómo puedo evitar que se llame antes de que se realice una llamada al hacer clic en el botón Enviar?Cómo evitar antes de que se llame al hacer clic en el botón Enviar

$(document).ready(function() 
{ 
    $('input:text,input:checkbox,input:radio,textarea,select').one('change', function() 
    { 
    //('BODY').attr('onbeforeunload',"return 'Leaving this page will cause any unsaved data to be lost.';"); 
    if(
    window.onbeforeunload = function() { return 'You have unsaved changes!'; } 

    }); 

}); 

Respuesta

8

No se puede impedir la convocatoria de unbeforeunload, pero utilizando una variable indicador global, puede controlar si se muestra una advertencia.

en el documento, añadir la secuencia de comandos:

warn_on_unload = "You have unsaved changes!" 

en el caso presente, añadir:

warn_on_unload = ""; 

la definición de caso, el cambio a:

window.onbeforeunload = function() { return warn_on_unload; } 

a través warn_on_unload, ahora puede activar o desactivar el mensaje de advertencia a voluntad.

+0

intentó y funcionó! Gracias. – ASD

+0

Cómo agregar borrosidad, presionar tecla en este $ ('entrada: texto, entrada: casilla de verificación, entrada: radio, área de texto, seleccionar'). Uno ('cambio', función() – ASD

+0

Es un problema diferente, es mejor abrir un nueva pregunta para eso. –

7

Aquí es el código final:

$(document).ready(function() 
{ 
    var warn_on_unload=""; 
    $('input:text,input:checkbox,input:radio,textarea,select').one('change', function() 
    { 
     warn_on_unload = "Leaving this page will cause any unsaved data to be lost."; 

     $('#submit').click(function(e) { 
      warn_on_unload = "";}); 

      window.onbeforeunload = function() { 
      if(warn_on_unload != ''){ 
       return warn_on_unload; 
      } 
     } 
    }); 
}); 
+1

Realmente satisfecho con esto +1 – Luke

3

lo modificó: ahora ignora la forma de presentación

$(document).ready(function() { 
var warn_on_unload = ""; 
$('input:text,textarea').on('change', function() { 
    warn_on_unload = "Leaving this page will cause any unsaved data to be lost."; 
    $("form").submit(function() { 
     warn_on_unload = ""; 
    }); 
    window.onbeforeunload = function() { 
     if (warn_on_unload != '') { 
      return warn_on_unload; 
     } 
    } 
}); 
}); 
4

puede utilizar .on() de obligar onbeforeunload y luego usar .off() para desvincularla de envío del formulario, corta y dulce

$(document).ready(function() { 
    $(window).on('beforeunload', function(){ 
     return "You have unsaved changes!"; 
    }); 
    $(document).on("submit", "form", function(event){ 
     $(window).off('beforeunload'); 
    }); 
} 
1

Si solo quieres para desactivar Onbeforeunload Event en el botón de enviar. Así que aquí un código de ejemplo

document.getElementById('sub').onsubmit = function(e) { 
window.onbeforeunload = null; 
return true; 
} 

Pero si quieres monitores de forma cambios y alertas (cuadro de confirmación) el usuario antes de salir de la página, a continuación, voy a sugerir que se Plugin aquí es un plugin jQuery que hacer exactamente lo que he escrito https://github.com/snikch/jquery.dirtyforms

el plugin monitior sus formularios cambios y alerta antes de salir de la página

la mejor parte "no va a dispaly el cuadro de alerta cuando yo u Haga clic en el botón Enviar" O enviar el formulario

Ejemplo de código: -

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

Cuestiones relacionadas