Come rilevare i dati non salvati in forma quando l’utente lascia la pagina?

Devo rilevare i dati non salvati nel modulo quando l’utente lascia la pagina senza inviare il modulo. Vorrei implementarlo senza aggiungere un listener di modifica del valore a ciascun input.

Questo è il requisito funzionale:

“L’utente apre una pagina piuttosto che fare clic su un collegamento qualsiasi se i valori nella pagina modificano un popup di messaggio di avviso per informare l’utente che è necessario salvare i dati modificati, ma se non si modifica nulla, il sistema continua senza informare l’utente”.

Ho provato a confrontare il metodo array per confrontare sia DTO che arrivano per DB e DTO bind, ma mi dà un sacco di problemi nella lunghezza dell’array e nel confronto dei byte.

Questo è normalmente implementato sul lato client con l’aiuto di JavaScript, perché non è ansible intercettare l’evento beforeunload dal lato server quando l’utente lascia la pagina.

Ecco un esempio concreto con l’aiuto della libreria JavaScript jQuery (altrimenti si otterrebbe un codice 10 volte più grande per renderlo correttamente compatibile con i crossbrowser e funzionerà perfettamente con re-rendering di ajax):

   

È sufficiente incollarlo nel modello o semplicemente inserirlo in un file script.js incluso in .

Questo ha funzionato per me.

 $(function() { // Set the unload message whenever any input element get changed. $('input').change(function() { setConfirmUnload(true); }); // Turn off the unload message whenever a form get submitted properly. $('form').submit(function() { setConfirmUnload(false); }); }); function setConfirmUnload(on) { var message = "You have unsaved data. Are you sure to leave the page?"; window.onbeforeunload = (on) ? function() { return message; } : null; }