Questo potrebbe essere gestito con una sola variabile booleana, la chiamiamo gestione di bit dirty. Se hai osservato, generalmente nelle pagine web, una volta che l'utente esegue un'azione di modifica su uno qualsiasi dei campi, il modulo è considerato sporco (modificato) (anche se i dati rimangono invariati dopo la modifica). Quando l'utente tenta di allontanarsi dalla pagina, viene richiesto all'utente se desidera salvare le modifiche.
Come per la pratica standard, non vi è alcun controllo se dopo aver modificato un campo se il valore effettivamente è stato modificato o meno. Ad esempio: se l'utente modifica e appende 'xyz' a un campo di testo e poi elimina 'xyz' essenzialmente i dati del modulo rimangono gli stessi di prima, ma il modulo è ancora considerato come 'sporco' e all'utente viene richiesto un messaggio di avviso quando cerca di allontanarsi.
Quindi, se si desidera implementare queste cose diventa piuttosto semplice. Dovresti semplicemente aggiungere eventcinder onchange() ai controlli e impostare la variabile booleana globale come isDirty su true all'interno di quegli eventhandler.
Una volta che l'utente vuole allontanarsi, è possibile visualizzare un messaggio "Ci possono essere modifiche non salvate nella pagina corrente. Vuoi salvarle?". L'utente non sarà deluso anche se si accorge che la sua modifica non ha modificato i dati iniziali.
Le risposte fornite in precedenza implementano questo stesso comportamento. E ho scritto questo perché sembravi avere un'idea per controllare ogni singolo campo con il suo valore iniziale per vedere se era veramente alterato dopo la modifica. Volevo solo dirti che controllare ogni campo non è affatto necessario.
fonte
2009-03-01 06:00:09
+1, è possibile elaborare questa per eliminare il caso di dati in realtà non cambiano - è possibile salvare lo stato iniziale e confrontarlo ad esso (evento onfocus uso per questo) e solo allora impostare il modulo per "sporco" – Dror
Puoi rendere la prima linea migliore: 'var $ inps = $ ('# myForm: input'), formAltered = false;' – ANeves