Actualización (2017)
Los navegadores modernos ahora consideran que mostrar un mensaje personalizado es un peligro para la seguridad y, por lo tanto, se ha eliminado de todos ellos. Los navegadores ahora solo muestran mensajes genéricos. Como ya no tenemos que preocuparnos por configurar el mensaje, es tan simple como:
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
Lea a continuación para obtener soporte de navegador heredado.
Actualización (2013)
La respuesta original es adecuada para IE6-8 y FX1-3.5 (que es a lo que estábamos apuntando en 2009 cuando se escribió), pero está bastante desactualizada ahora y no funcionará en la mayoría de los navegadores actuales. a continuación para referencia.
El window.onbeforeunload
no es tratado consistentemente por todos los navegadores. Debería ser una referencia de función y no una cadena (como decía la respuesta original), pero eso funcionará en navegadores más antiguos porque la verificación para la mayoría de ellos parece ser si hay algo asignado onbeforeunload
(incluida una función que devuelve null
).
Establece window.onbeforeunload
una referencia de función, pero en los navegadores más antiguos debe establecer returnValue
el evento en lugar de simplemente devolver una cadena:
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;
};
No puede confirmOnPageExit
hacer que verifique y devuelva nulo si desea que el usuario continúe sin el mensaje. Aún necesita eliminar el evento para encenderlo y apagarlo de manera confiable:
// Turn it on - assign the function that returns the string
window.onbeforeunload = confirmOnPageExit;
// Turn it off - remove the function entirely
window.onbeforeunload = null;
Respuesta original (trabajada en 2009)
Encenderlo:
window.onbeforeunload = "Are you sure you want to leave?";
Para apagarlo:
window.onbeforeunload = null;
Tenga en cuenta que este no es un evento normal, no puede unirse a él de la manera estándar.
Para verificar los valores? Eso depende de su marco de validación.
En jQuery esto podría ser algo como (ejemplo muy básico):
$('input').change(function() {
if( $(this).val() != "" )
window.onbeforeunload = "Are you sure you want to leave?";
});