2011-10-21 13 views
5

Tengo una página en la que yo quiero confirmar si el usuario quiere salir. tengo que confirmar sólo cuando se cumple una determinada condición, así que escribió un código como éste¿cómo puedo evitar una descarga antes de que se active una determinada condición?

var back=false; 
back=//check if user pressed back button 
window.onbeforeunload = function (e) { 
    alert(back); //this alerts true 
    if(back==true) 
     return false; 
     //e.preventDefault; --this does not work too 
}; 

pero esto no funciona. Quiero decir que cuando hago clic en el botón Atrás esto antes de que se descargue todavía se dispara y aún recibo el mensaje de confirmación incluso cuando estoy devolviendo el mensaje falso. ¿Qué puede estar mal? Gracias

Respuesta

11

devolver una cadena si quiere ofrecer una opción para el usuario para abortar la descarga. No devuelva nada en otros casos.

var back = false; 
back = true; //Somewhere, the condition is set to true 
window.onbeforeunload = function (e) { 
    if(back == true) 
     return "Are you sure to exit?"; 
} 
+1

No, no puedes cambiar el mensaje de confirmación, jaja (broma) – david

+1

Navegadores @lovesh tienen sus propias implementaciones del cuadro de diálogo 'onbeforeunload' de confirmación con el texto estándar que siempre mostrar, y no todos mostrarán el texto que le devolvió al usuario. –

+0

@lovesh 'return false' en tu código ** funcionó **. Has olvidado establecer 'back = true'. –

0

También podría considerar no establecer el evento hasta el window.beforeunload su lista de condiciones se cumplen.

var confirmUserToLeave = function() { 
    if (/* conditions are met */) { 
     window.unbeforeunload = function (e) { 
      /* whatever you want to do here */ 
     }; 
    } else { 
     window.unbeforeunload = undefined; 
    } 
}; 

Luego, simplemente llame a ese método en ciertos eventos que pueden cambiar el resultado de sus 'condiciones se cumplen'.

+0

idea de por qué 'volver false' en mi código no funcionó? – lovesh

1
$(window).bind('beforeunload',function() { 
    return "'Are you sure you want to leave the page. All data will be lost!"; 
}); 

$('#a_exit').live('click',function() { 
    $(window).unbind('beforeunload'); 
}); 

Pruebe esto. El código anterior funciona en la mayoría de las condiciones.

0

Condición de back-end

var confirmExist = function (e) { 
    return true; 
} 
window.onbeforeunload = confirmExist; 
http get, post request 
.then(function(r)) { 
    window.onbeforeunload = null; 
} 
Cuestiones relacionadas