L' beforeunloadevento si attiva ogni volta che l'utente lascia la tua pagina per qualsiasi motivo.
Ad esempio, verrà attivato se l'utente invia un modulo, fa clic su un collegamento, chiude la finestra (o la scheda) o accede a una nuova pagina utilizzando la barra degli indirizzi, la casella di ricerca o un segnalibro.
È possibile escludere invii di moduli e collegamenti ipertestuali (tranne che da altri frame) con il seguente codice:
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;
})
Per le versioni jQuery precedenti alla 1.7, prova questo:
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;
})
Il livemetodo non funziona con l' submitevento, quindi se aggiungi un nuovo modulo, dovrai associare anche il gestore.
Nota che se un diverso gestore eventi annulla l'invio o la navigazione, perderai la richiesta di conferma se la finestra verrà effettivamente chiusa in seguito. Si potrebbe rimediare registrando il tempo in submite clickmanifestazioni, e controllando se l' beforeunloadaccade più di un paio di secondi più tardi.