Quello che sto cercando di ottenere è di avvisare l'utente delle modifiche non salvate se tenta di chiudere una pagina o di spostarsi da essa senza salvare prima.Attivazione di ONBeforeUnload SOLO quando i valori dei campi sono cambiati
Sono riuscito a visualizzare la finestra di dialogo OnBeforeUnload()
... ma non voglio che venga visualizzata affatto se l'utente non ha modificato alcun valore di campo. Per questo, sto utilizzando questo campo di input nascosto chiamato is_modified che inizia con un valore predefinito di false e passa a true quando un campo è modificato.
Ho tentato di associare l'evento a in questo campo is_modified per provare a rilevare la modifica del valore ... e solo dopo attivare OnBeforeUnload.
$('#is_modified').change(function() {
if($('#is_modified').val() == 'true')
window.onbeforeunload = function() { return "You have unsaved changes."; }
});
Ma da quello che ho dato è che l'evento change()
funziona solo dopo questi 3 punti - un campo riceve il focus, un valore non è cambiato e il campo perde concentrarsi. Nel caso del campo di input nascosto, non sono sicuro di come questa parte di focus ricevente e perdente funzioni! Quindi, la funzione onbeforeunload non viene mai attivata.
Qualcuno può suggerire un modo per mantenere un trigger su is_modified?
Grazie.
"true" non è il valore corretto. In alcuni browser (almeno Firefox, forse più) restituendo "null" si annulla la finestra di dialogo. Howerver, in IE, non sono riuscito a trovare un modo per cancellare la finestra di dialogo dall'interno del gestore. L'unica cosa che ha funzionato per me è stato di rimuovere completamente il gestore (cioè "window.beforeunload = null"), come nella risposta di Bryan Larsen. –
Abbastanza giusto. Purtroppo, non ho provato a fondo la mia soluzione prima di rispondere. :( –
So di essere un po 'in ritardo alla festa, ma ero solo in esecuzione in questo. Tuttavia in IE, se la funzione restituisce 'undefined' (o non restituisce nulla), la finestra di dialogo non mostra (questa funziona anche in FF). ho provato a tornare true/false/null e IE sarebbe solo mettere "true"/"false"/"null", come il testo nella finestra di dialogo. Nessuna idea perché. Spero che questo aiuta a qualcun altro. –