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 desencadenar un «OnBeforeUnload» alerta para mostrar si el usuario NO haga clic en cualquiera de las acciones del formulario para informarles de que están dejando de página, y sus cambios no pueden ser salvados.

He probado el código siguiente, pero parece como si el unbeforeunload se activa antes de mi evento click. Cualquier sugerencias 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.";
    }
}

OriginalEl autor pingu | 2010-11-13

1 Comentario

  1. 18

    Usted necesita para hacer el check dentro de el controlador, como este:

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

    Actualmente es vinculante window.onbeforeunload cuando el código se ejecuta porque $buttonpressed es false cuando se ejecuta…no importa si se cambia más tarde ya que ya enlazado con el controlador. Una alternativa es hacer un poco más simple, como este:

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

    Esto sólo elimina el controlador en click lugar. Una más del evento adecuado para manejar otros que presenten casos sería adjuntar a la submit evento, como este:

    $j(".myForm").submit(function(){
        window.onbeforeunload = null;
    });
    Ahh tan fácil! Gracias por una respuesta de excelente calidad!
    La última opción no funciona para mí, onbeforeunload fue llamado antes de que el evento de envío. Se fija con un onClick sobre el botón de enviar, y una variable. Gracias!

    OriginalEl autor Nick Craver

Dejar respuesta

Please enter your comment!
Please enter your name here