El beforeunload
evento se activa cada vez que el usuario abandona su página por cualquier motivo.
Por ejemplo, se activará si el usuario envía un formulario, hace clic en un enlace, cierra la ventana (o pestaña) o va a una nueva página utilizando la barra de direcciones, el cuadro de búsqueda o un marcador.
Puede excluir envíos de formularios e hipervínculos (excepto de otros marcos) con el siguiente código:
var inFormOrLink;
$('a').on('click', function() { inFormOrLink = true; });
$('form').on('submit', function() { inFormOrLink = true; });
$(window).on("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
Para las versiones jQuery anteriores a 1.7, intente esto:
var inFormOrLink;
$('a').live('click', function() { inFormOrLink = true; });
$('form').bind('submit', function() { inFormOrLink = true; });
$(window).bind("beforeunload", function() {
return inFormOrLink ? "Do you really want to close?" : null;
})
El live
método no funciona con el submit
evento, por lo que si agrega un nuevo formulario, también deberá vincularlo con el controlador.
Tenga en cuenta que si un controlador de eventos diferente cancela el envío o la navegación, perderá el mensaje de confirmación si la ventana se cierra más tarde. Se podría arreglar eso registrando el tiempo de los submit
y click
eventos, y comprobando si la beforeunload
pasa más de un par de segundos más tarde.