2011-10-21 14 views
5

Ho una pagina su cui voglio confermare se l'utente vuole lasciare. devo solo confermare quando una certa condizione è soddisfatta Così ho scritto il codice come questocome posso evitare che onbeforeunload venga attivato quando viene soddisfatta una determinata condizione?

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 
}; 

, ma questo non funziona. Voglio dire quando clicco su di nuovo questo pulsante di onbeforeunload spara ancora e ho ancora ottenere il messaggio di conferma, anche quando i m ritorno false.Whats può essere sbagliato? Grazie

risposta

11

restituire una stringa se si vuole offrire la possibilità per l'utente di interrompere lo scarico. Non restituire nulla negli altri casi.

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 non è possibile modificare il messaggio di conferma, haha ​​(scherzando) – david

+1

Browser @lovesh hanno le loro implementazioni della finestra di conferma 'onbeforeunload' con il testo standard che sarà sempre mostra, e non tutti mostreranno il testo che hai restituito all'utente. –

+0

@lovesh 'return false' nel codice ** ha funzionato **. Hai dimenticato di impostare 'back = true'. –

0

Si potrebbe anche considerare di non impostare l'evento window.beforeunload finché l'elenco delle condizioni non viene soddisfatto.

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

Quindi chiamare questo metodo su determinati eventi che potrebbero modificare l'esito delle "condizioni soddisfatte".

+0

qualche idea del perché 'false' tornare nel mio codice non ha funzionato? – 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'); 
}); 

Prova questo. Sopra il codice funziona nella maggior parte delle condizioni.

0

Condizione per il back-end

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