2010-08-13 14 views
7

Tengo un sitio que usa mucho JavaScript (principalmente jQuery) y necesito una buena forma global para hacerle saber al usuario que perderán los cambios no guardados cuando se alejen de una página en particular.Práctica recomendada para advertir al usuario de que perderán datos

Por el momento tengo un evento onchange colocado en las entradas y ajuste mi navegación principal en una función que mostrará la advertencia cuando haga clic.

Esto se siente muy torpe y no escala bien (navegación que no forma parte de la navegación principal tiene que ajustarse manualmente, lo que está lejos de ser ideal)

+0

Saludos para el GenericTypeTea corrector ortográfico! – Toby

+0

Eso está bien. Soy un poco OCD cuando se trata de personas que escriben sueltas en lugar de perder. – GenericTypeTea

Respuesta

5

Tengo un evento onchange en mis entradas y establezco una variable isDirty en true cuando cambian.

Luego uso onbeforeunload evento para avisar al usuario de los cambios no guardados:

var isDirty = false; 

window.onbeforeunload = function (evt) { 
    if (isDirty) { 
     return 'If you continue your changes will not be saved.'; 
    } 
} 
+0

¿por qué no solo verifica si isDirty es verdadero en lugar de tener una función separada para hacerlo? – user353297

+0

@ mel33t - Erm, yo soy. – GenericTypeTea

+0

Debes haber editado tus respuestas porque podría jurar que la línea decía "if (checkIsDirty()) {" (o algo similar). – user353297

5

Usted está buscando el evento onbeforeunload.

como

$(window).bind('beforeunload', function(){ 
    return "Are you really sure?"; 
}); 

orígenes:

window.onbeforeunload = function(){ 
    return "Are you really sure?"; 
}); 

Eso, por supuesto, es sólo el "método de prevención". Todavía necesita un poco de lógica para saber si hubo cambios en su sitio o no. Eso podría hacerse fácilmente usando un boolean por ejemplo. Además debe realizar una detección rápida como

if('onbeforeunload' in window){} 

Creo que todos los navegadores soportan el caso hoy en día, pero todavía hay navegador que no sabe ese evento. Entonces, si la condición anterior falla, aún puedes retroceder con gracia hacia otro lado.

+1

+1. Por amabilidad, por supuesto, tenga algún tipo de bandera que pueda verificar y solo muestre la confirmación si hay * cambios * no guardados que se perderían. Tenga en cuenta que SO sí lo hace (comience a escribir, responda e intente navegar ...). –

0

Utilícelo en el evento de ventana on unload para ver cuándo va a cambiar la página. A continuación, solicite una alerta de caja de luz para advertir al usuario si se perderá la navegación de datos no guardados.

Cuestiones relacionadas