Można to obsłużyć za pomocą tylko jednej zmiennej binarnej, nazywamy ją bitową obsługą bitów. Jeśli zaobserwowałeś, ogólnie na stronach internetowych, gdy użytkownik wykona jakąś czynność edycji na którymkolwiek z pól, formularz zostanie uznany za brudny (edytowany) (nawet jeśli po edycji pozostaną niezmienione). Gdy użytkownik próbuje odejść od strony, użytkownik jest monitowany, jeśli chce zapisać zmiany.
Zgodnie ze standardową praktyką, nie ma sprawdzenia, czy po edycji jakiegoś pola wartość rzeczywiście się zmieniła, czy nie. Na przykład: jeśli użytkownik edytuje i dodaje "xyz" do pola tekstowego, a następnie usuwa "xyz", dane formularza pozostają takie same jak przedtem, ale formularz jest nadal uznawany za "brudny", a użytkownik jest monitowany o komunikat ostrzegawczy, gdy próbuje odejść.
Tak więc, jeśli chcesz zaimplementować to, otrzymasz proste rozwiązanie. Trzeba by tylko dodać sterowniki zdarzeń onchange() do kontrolek i ustawić globalną zmienną boolean podobnie jak isDirty na true wewnątrz tych sterowników zdarzeń.
Gdy użytkownik chce odejść, może wyświetlić komunikat "Nie można zapisać niezapisanych zmian na bieżącej stronie. Czy chcesz je zapisać?". Użytkownik nie będzie zawiedziony, nawet jeśli zauważy, że jego zmiana nie zmieniła danych początkowych.
Powyższe odpowiedzi implementują to samo zachowanie. Napisałem to, ponieważ wydawało się, że masz pomysł, aby sprawdzić każde pole według jego wartości początkowej, aby sprawdzić, czy rzeczywiście zostało zmienione po edycji. Chciałem tylko powiedzieć, że sprawdzenie wszystkich pól w ogóle nie jest konieczne.
+1, można opracować to, aby wyeliminować przypadek danych naprawdę nie zmienia - można zapisać stan początkowy i porównać do niego (zdarzenie użycie onfocus do tego), a dopiero potem ustawić formularz „brudne” – Dror
Możesz poprawić pierwszą linię: 'var $ inps = $ ('# myForm: input'), formAltered = false;' – ANeves