O beforeunload
evento é acionado sempre que o usuário sai da sua página por qualquer motivo.
Por exemplo, ele será acionado se o usuário enviar um formulário, clicar em um link, fechar a janela (ou guia) ou for para uma nova página usando a barra de endereços, a caixa de pesquisa ou um marcador.
Você pode excluir envios de formulários e hiperlinks (exceto de outros quadros) com o seguinte 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 versões do jQuery anteriores a 1.7, tente o seguinte:
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;
})
O live
método não funciona com o submit
evento, portanto, se você adicionar um novo formulário, precisará vincular o manipulador a ele também.
Observe que se um manipulador de eventos diferente cancelar o envio ou a navegação, você perderá o prompt de confirmação se a janela for fechada mais tarde. Você pode corrigir isso através da gravação do tempo nos submit
e click
eventos, e verificar se o beforeunload
acontece mais do que um par de segundos mais tarde.