Aggiornamento (2017)
I browser moderni ora considerano la visualizzazione di un messaggio personalizzato come un pericolo per la sicurezza ed è stato quindi rimosso da tutti. I browser ora visualizzano solo messaggi generici. Dal momento che non dobbiamo più preoccuparci di impostare il messaggio, è semplice come:
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
Leggi di seguito per il supporto del browser legacy.
Aggiornamento (2013)
La risposta originale è adatta per IE6-8 e FX1-3.5 (che è ciò a cui stavamo puntando nel 2009 quando è stata scritta), ma è piuttosto obsoleta ora e non funzionerà nella maggior parte dei browser attuali - Ho lasciato sotto per riferimento.
Non window.onbeforeunload
viene trattato in modo coerente da tutti i browser. Dovrebbe essere un riferimento di funzione e non una stringa (come indicato nella risposta originale), ma funzionerà nei browser più vecchi perché il controllo per la maggior parte di essi sembra essere assegnato a qualcosa onbeforeunload
(inclusa una funzione che ritorna null
).
Si imposta window.onbeforeunload
su un riferimento di funzione, ma nei browser più vecchi è necessario impostare returnValue
l'evento anziché invece di restituire una stringa:
var confirmOnPageExit = function (e)
{
// If we haven't been passed the event get the window.event
e = e || window.event;
var message = 'Any text will block the navigation and display a prompt';
// For IE6-8 and Firefox prior to version 4
if (e)
{
e.returnValue = message;
}
// For Chrome, Safari, IE8+ and Opera 12+
return message;
};
Non è possibile confirmOnPageExit
fare questo controllo e restituire null se si desidera che l'utente continui senza il messaggio. Devi ancora rimuovere l'evento per attivarlo e disattivarlo in modo affidabile:
// Turn it on - assign the function that returns the string
window.onbeforeunload = confirmOnPageExit;
// Turn it off - remove the function entirely
window.onbeforeunload = null;
Risposta originale (ha funzionato nel 2009)
Accenderlo:
window.onbeforeunload = "Are you sure you want to leave?";
Per disattivarlo:
window.onbeforeunload = null;
Tieni presente che questo non è un evento normale: non puoi vincolarlo in modo standard.
Per verificare i valori? Dipende dal tuo framework di validazione.
In jQuery potrebbe essere qualcosa del genere (esempio molto semplice):
$('input').change(function() {
if( $(this).val() != "" )
window.onbeforeunload = "Are you sure you want to leave?";
});