Pregunta

Tengo un formulario que se presenta a través de PHP con 3 presentar acciones:

  • Guardar y continuar
  • Guardar y Salir
  • Salir sin guardar

Me gustaría para activar una alerta "Onbeforeunload" que se mostrará si el usuario no haga clic en cualquiera de las acciones de formulario para informarles de que están dejando a la página, y sus cambios no se pueden guardar.

He intentado el siguiente código pero parece como si el unbeforeunload se active antes de mi evento de clic. ¿Alguna sugerencia sobre la mejor manera de lograr esto?

$buttonpressed = false;
$j(".Actions input").click(function(){
    $buttonpressed = true;                                  
});

if(!$buttonpressed){
    window.onbeforeunload = function(){
        return "Your changes may not be saved.";
    }
}
¿Fue útil?

Solución

Es necesario hacer el check dentro de el manipulador, así:

window.onbeforeunload = function(){
    if(!$buttonpressed){
        return "Your changes may not be saved.";
    }
}

Actualmente se window.onbeforeunload vinculante cuando el código se ejecuta porque $buttonpressed es false cuando se acaba ... no importa si cambia más adelante puesto que ya obligado al controlador. Una alternativa es hacer que sea un poco más simple, como esto:

window.onbeforeunload = function(){
    return "Your changes may not be saved.";
}
$j(".Actions input").click(function(){
    window.onbeforeunload = null;
});

Esto sólo elimina el manejador de click lugar. Un caso más apropiado para manejar otros someter casos serían para insertarse en el caso submit, como esto:

$j(".myForm").submit(function(){
    window.onbeforeunload = null;
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top