Aquí en stackoverflow, si comenzó a hacer cambios, entonces intenta navegar fuera de la página, aparece un botón de confirmación de JavaScript y le pregunta: "¿Está seguro de que desea navegar fuera de esta página?" Blee Blah Bloo ...
¿Alguien ha implementado esto antes? ¿Cómo hago un seguimiento de los cambios que se cometieron? Creo que podría hacerlo yo mismo, estoy tratando de aprender las buenas prácticas de ustedes, los expertos.
Intenté lo siguiente pero aún no funciona:
<html>
<body>
<p>Close the page to trigger the onunload event.</p>
<script type="text/javascript">
var changes = false;
window.onbeforeunload = function() {
if (changes)
{
var message = "Are you sure you want to navigate away from this page?\n\nYou have started writing or editing a post.\n\nPress OK to continue or Cancel to stay on the current page.";
if (confirm(message)) return true;
else return false;
}
}
</script>
<input type='text' onchange='changes=true;'> </input>
</body>
</html>
¿Alguien puede publicar un ejemplo?
javascript
html
message
onbeforeunload
confirm
Shimmy Weitzhandler
fuente
fuente
Respuestas:
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:
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 asignadoonbeforeunload
(incluida una función que devuelvenull
).Establece
window.onbeforeunload
una referencia de función, pero en los navegadores más antiguos debe establecerreturnValue
el evento en lugar de simplemente devolver una cadena: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:Respuesta original (trabajada en 2009)
Encenderlo:
Para apagarlo:
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):
fuente
$("#submit_button").click(function() { window.onbeforeunload = null; });
. Originalmente usé el evento onclick del botón, pero además de no ser tan bueno, tampoco funcionó con IE8.window.onbeforeunload
evento.El
onbeforeunload
Microsoft-ism es lo más parecido que tenemos a una solución estándar, pero tenga en cuenta que el soporte del navegador es desigual; por ejemplo, para Opera solo funciona en la versión 12 y posteriores (aún en versión beta a partir de este escrito).Además, para obtener la máxima compatibilidad , debe hacer más que simplemente devolver una cadena, como se explica en la Red de desarrolladores de Mozilla .
Ejemplo: defina las siguientes dos funciones para habilitar / deshabilitar la solicitud de navegación (consulte el ejemplo de MDN):
Luego defina una forma como esta:
De esta manera, el usuario solo será advertido sobre la posibilidad de navegar si ha cambiado el área de texto, y no se le preguntará cuando envíe el formulario.
fuente
Para que esto funcione en Chrome y Safari, deberías hacerlo así
Referencia: https://developer.mozilla.org/en/DOM/window.onbeforeunload
fuente
Con JQuery, esto es bastante fácil de hacer. Ya que puedes unirte a conjuntos.
NO es suficiente para hacer onbeforeunload, solo desea activar la navegación si alguien comienza a editar cosas.
fuente
jquerys 'beforeunload' funcionó muy bien para mí
fuente
Para las personas nuevas que buscan una solución simple, simplemente pruebe Areyousure.js
fuente
Esta es una manera fácil de presentar el mensaje si se ingresan datos en el formulario, y no mostrar el mensaje si se envía el formulario:
fuente
Para ampliar en la respuesta ya sorprendente de Keith :
Mensajes de advertencia personalizados
Para permitir mensajes de advertencia personalizados, puede ajustarlo en una función como esta:
Luego simplemente llame a esa función con su mensaje personalizado:
Habilitar la navegación nuevamente
Para volver a habilitar la navegación, todo lo que necesita hacer es configurar
window.onbeforeunload
anull
. Aquí está, envuelto en una pequeña y clara función que se puede llamar en cualquier lugar:Usando jQuery para vincular esto para formar elementos
Si usa jQuery, esto puede vincularse fácilmente a todos los elementos de un formulario como este:
Luego, para permitir que se envíe el formulario:
Formas modificadas dinámicamente:
preventNavigation()
yenableNavigation()
puede vincularse a cualquier otra función según sea necesario, como modificar dinámicamente un formulario o hacer clic en un botón que envía una solicitud AJAX. Lo hice agregando un elemento de entrada oculto al formulario:Luego, cada vez que quiero evitar que el usuario navegue, active el cambio en esa entrada para asegurarme de que
preventNavigation()
se ejecute:fuente
Aquí intenta esto, funciona al 100%
fuente
El estándar establece que la solicitud se puede controlar cancelando el evento beforeunload o estableciendo el valor de retorno en un valor no nulo . También establece que los autores deben usar Event.preventDefault () en lugar de returnValue, y el mensaje que se muestra al usuario no es personalizable .
A partir de 69.0.3497.92, Chrome no ha cumplido con el estándar. Sin embargo, hay un informe de error archivado y una revisión en curso. Chrome requiere que returnValue se establezca por referencia al objeto de evento, no por el valor devuelto por el controlador.
Es responsabilidad del autor rastrear si se han realizado cambios; se puede hacer con una variable o asegurando que el evento solo se maneje cuando sea necesario.
fuente
Cuando el usuario comienza a realizar cambios en el formulario, se establecerá una bandera booleana. Si el usuario intenta salir de la página, verifica esa bandera en el evento window.onunload . Si se establece el indicador, muestra el mensaje devolviéndolo como una cadena. Si devuelve el mensaje como una cadena, aparecerá un cuadro de diálogo de confirmación con su mensaje.
Si está utilizando ajax para confirmar los cambios, puede establecer el indicador
false
después de que los cambios se hayan confirmado (es decir, en el evento de éxito de ajax).fuente
Puede agregar un
onchange
evento en el área de texto (o cualquier otro campo) que establezca una variable en JS. Cuando el usuario intenta cerrar la página (window.onunload), verifica el valor de esa variable y muestra la alerta en consecuencia.fuente
alert
yconfirm
está bloqueado durantewindow.onbeforeunload
ywindow.onunload
(al menos en la versión de Chrome en mi PC, pero probablemente también en todos los navegadores para admitir esos controladores).Basado en todas las respuestas en este hilo, escribí el siguiente código y funcionó para mí.
Si solo tiene algunas etiquetas de entrada / área de texto que requieren que se verifique un evento de descarga, puede asignar atributos de datos HTML5 como
data-onunload="true"
por ej.
y el Javascript (jQuery) puede verse así:
fuente
aqui esta mi html
Y así es como hice algo similar en JavaScript
fuente
Se puede hacer fácilmente estableciendo un ChangeFlag en verdadero, en el evento onChange de TextArea . Use javascript para mostrar el cuadro de diálogo de confirmación según el valor de ChangeFlag . Deseche el formulario y navegue a la página solicitada si confirmar devuelve verdadero, de lo contrario no haga nada .
fuente
Lo que quiere usar es el evento onunload en JavaScript.
Aquí hay un ejemplo: http://www.w3schools.com/jsref/event_onunload.asp
fuente
Hay un parámetro "onunload" para la etiqueta del cuerpo desde allí puede llamar a las funciones de JavaScript. Si devuelve falso, evita navegar lejos.
fuente
<body onunload="return false;">
.