Направете страница, за да укажете на браузъра да не кешира/запазва въведените стойности

Повечето браузъри кешират входните стойности на формата. Така че, когато потребителят опреснява страница, входовете имат еднакви стойности.

Ето моя проблем. Когато потребител щракне върху Запазване, сървърът потвърждава данните, публикувани в POST (напр. проверени продукти), и ако не са валидни, ги изпраща обратно към браузъра. Въпреки това, както е посочено по-горе, дори ако сървърът изчисти селекцията за някои стойности, те пак може да бъдат избрани поради кеша на браузъра!

Моите данни имат невидими (докато не бъде избран родителският елемент) квадратчета за отметка, така че потребителят може дори да не знае, че някаква предишна стойност все още е избрана, докато не щракне отново Запазване и не получи съобщение за грешка - въпреки че потребителят мисли не е. Което е дразнещо.

Това може да бъде разрешено чрез Ctrl + F5, но дори не е решение. Има ли автоматичен/програмен начин да кажете на браузъра да не кешира входните данни на формуляр на някакъв формуляр/страница?


person queen3    schedule 23.04.2010    source източник
comment
<form autocomplete="off"... опция ли е за вас? Този проблем възниква ли във всички браузъри или само в един конкретен?   -  person David Kolar    schedule 23.04.2010
comment
Има ли начин да отговоря на този въпрос с позоваване на падащи <select> списъци. Имам списък и съм дефинирал selected избор, но опресняването на страницата запазва предишните избрани опции.   -  person Martin    schedule 01.04.2016
comment
Искам да постигна обратното - да запазя входните стойности на всяка страница върху бутона за връщане назад (щракнете назад два пъти - съответно вземете входове). Има различни примери за използване на много JS код (които наистина не работят IMHO), но - има ли по-прост начин? Опитах autocomplete=on както на формуляра, така и на полетата за въвеждане - не работи. Браузърът е Chrome.   -  person Dmitry z    schedule 02.07.2020


Отговори (5)


Изрично ли задавате стойностите като празни? Например:

<input type="text" name="textfield" value="">

Това трябва да спре браузърите да поставят данни там, където не трябва. Като алтернатива можете да добавите атрибута autocomplete към етикета на формуляра:

<form autocomplete="off" ...></form>
person DisgruntledGoat    schedule 23.04.2010
comment
Говоря за квадратчета за отметка, така че не мога да задам стойност на . И изключването на автоматичното довършване означава ли да не се съхраняват стойности за въвеждане на формуляр, когато потребителят натисне F5, не само за падащия списък за автоматично довършване? - person queen3; 23.04.2010
comment
Според developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion, autcompletion=off засяга кеширането на историята на сесиите, поне в Gecko. Ще тествам дали работи за това, което ми трябва. - person queen3; 23.04.2010
comment
@queen3: Да, квадратчетата за отметка са проблем, тъй като няма начин изрично да се каже, че не е отметнато. Ако все още имате проблеми, можете да опитате checked="false", може да работи в някои браузъри. Друга алтернатива е да използвате Javascript/jQuery за изрично премахване на отметките от всички квадратчета при зареждане на страницата. - person DisgruntledGoat; 28.04.2010
comment
@queen3, имаш предвид autocompletion=off, а не autocompletion=off - person Matt Baker; 12.07.2012
comment
Всички отговори и предложения не ми свършиха работа. Използване на chrome и разработване на .net - person hakan; 08.06.2014
comment
@piedpiper Опитайте ModelState.Clear() във вашето действие на контролера. Ако използвате return View(...или return PartialView(... тогава той ще върне старите стойности. Това е проектирано за MVC. - person thenninger; 02.05.2017
comment
... добавянето на autocomplete=off като аргумент на полето за въвеждане свърши работа за мен - person 6opko; 11.04.2021

От препратка към Stack Overflow

Не работи с value="" ако браузърът вече запазва стойността, така че трябва да добавите.

За таг за въвеждане има атрибут autocomplete, който можете да зададете:

<input type="text" autocomplete="off" />

Можете да използвате автоматично попълване и за формуляр.

person shareef    schedule 19.06.2013
comment
В Chrome изглежда, че autocomplete="off" няма ефект, когато се използва върху отделни елементи на формуляр - дори с атрибут value, изрично зададен празен, и при изпращане на заглавка Cache-Control: Must-Revalidate, това няма ефект. Трябваше да приложа атрибута autocomplete="off" към самия елемент <form>, за да потисна това поведение в Chrome. - person mindplay.dk; 18.07.2013
comment
Направих autocomplete=off във формуляра, но не работи за мен - person Kingsley Simon; 09.05.2016
comment
имам нужда от повече информация @KingsleySimon като браузър и може да имате някои настройки на браузъра си, които пречат на правилното поведение - person shareef; 09.05.2016
comment
изглежда, че поведението на браузъра се е променило: developer.mozilla.org/ en-US/docs/Web/Security/ - person david; 24.08.2016
comment
и имайте предвид валидната html форма. и например не е aform в друг и т.н - person shareef; 25.08.2016

Друг подход би бил да нулирате формуляра с помощта на JavaScript веднага след формуляра в HTML:

<form id="myForm">
  <input type="text" value="" name="myTextInput" />
</form>

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>
person pmko    schedule 08.12.2011

По принцип има два начина за изчистване на кеша:

<form autocomplete="off"></form>

or

$('#Textfiledid').attr('autocomplete', 'off');
person Anand Dwivedi    schedule 25.07.2015

Това работи за мен в по-новите браузъри:

autocomplete="new-password"
person erikrunia    schedule 24.07.2017