Większość przeglądarek buforuje wartości wejściowe formularzy. Kiedy więc użytkownik odświeża stronę, dane wejściowe mają te same wartości.
Oto mój problem. Kiedy użytkownik kliknie przycisk Zapisz , serwer sprawdza poprawność danych POST (np. Sprawdzone produkty), a jeśli nie są prawidłowe, odsyła je z powrotem do przeglądarki. Jednak, jak wspomniano powyżej, nawet jeśli serwer wyczyści wybór niektórych wartości, nadal mogą one zostać wybrane z powodu pamięci podręcznej przeglądarki!
Moje dane mają niewidoczne pola wyboru (do momentu wybrania elementu nadrzędnego), więc użytkownik może nawet nie być świadomy, że jakaś poprzednia wartość jest nadal zaznaczona, aż do ponownego kliknięcia Zapisz i otrzymania komunikatu o błędzie - nawet jeśli użytkownik uważa, że tak nie jest. Co jest irytujące.
Można to rozwiązać, wykonując Ctrl+ F5, ale nie jest to nawet rozwiązanie. Czy istnieje automatyczny / programowy sposób, aby powiedzieć przeglądarce, aby nie buforowała danych wejściowych formularza na jakimś formularzu / stronie?
źródło
<form autocomplete="off"...
jakaś opcja dla Ciebie? Czy ten problem występuje we wszystkich przeglądarkach, czy tylko w jednej w szczególności?<select>
list rozwijanych? Mam listę i zdefiniowałemselected
wybór, ale odświeżenie strony zachowuje wcześniej wybrane opcje.Odpowiedzi:
Czy jawnie ustawiasz wartości jako puste? Na przykład:
To powinno powstrzymać przeglądarki przed umieszczaniem danych tam, gdzie nie powinny. Alternatywnie możesz dodać
autocomplete
atrybut do tagu formularza:źródło
checked="false"
, może to działać w niektórych przeglądarkach. Inną alternatywą jest użycie Javascript / jQuery do jawnego odznaczenia wszystkich pól wyboru podczas ładowania strony.Z odniesienia do przepełnienia stosu
To nie zadziałało z wartością = "", jeśli przeglądarka już zapisała wartość, więc powinieneś dodać.
Dla tagu wejściowego istnieje atrybut autouzupełniania, który możesz ustawić:
Możesz użyć autouzupełniania również dla formularza.
źródło
autocomplete="off"
nie działa, gdy jest używany na poszczególnych elementach formularza - nawet zvalue
atrybutem jawnie ustawionym jako pusty, a podczas wysyłaniaCache-Control: Must-Revalidate
nagłówka nie miało to żadnego efektu. Musiałem zastosowaćautocomplete="off"
atrybut do samego<form>
elementu, aby powstrzymać to zachowanie w Chrome.Innym podejściem byłoby zresetowanie formularza za pomocą JavaScript bezpośrednio po formularzu w kodzie HTML:
źródło
Zasadniczo istnieją dwa sposoby wyczyszczenia pamięci podręcznej:
lub
źródło
To działało dla mnie w nowszych przeglądarkach:
źródło