Сделать страницу, чтобы браузер не кэшировал / сохранял входные значения

117

Большинство браузеров кешируют входные значения формы. Поэтому, когда пользователь обновляет страницу, входные данные имеют одинаковые значения.

Вот моя проблема. Когда пользователь нажимает кнопку « Сохранить» , сервер проверяет данные, отправленные POST (например, проверенные продукты), и, если они недействительны, отправляет их обратно в браузер. Однако, как указано выше, даже если сервер отменяет выбор для некоторых значений, они все равно могут быть выбраны из-за кеша браузера!

В моих данных есть невидимые (пока не выбран родительский элемент) флажки, поэтому пользователь может даже не знать, что какое-то предыдущее значение все еще выбрано, до тех пор, пока снова не нажмете « Сохранить» и не получит сообщение об ошибке, даже если пользователь думает, что это не так. Что раздражает.

Это можно решить, сделав Ctrl+ F5, но это даже не решение. Есть ли автоматический / программный способ указать браузеру не кэшировать входные данные формы на какой-либо форме / странице?

queen3
источник
1
Есть <form autocomplete="off"...вариант для вас? Эта проблема возникает во всех браузерах или только в одном?
Дэвид Колар,
Есть ли способ ответить на этот вопрос с помощью выпадающих <select>списков. У меня есть список, и я определил selectedвыбор, но при обновлении страницы сохраняются предыдущие выбранные параметры.
Martin
Я хочу добиться противоположного - сохранить входные значения каждой страницы на кнопке «Назад» (дважды щелкните назад, чтобы получить входные данные соответственно). Существуют различные примеры использования большого количества JS-кода (который на самом деле не работает, IMHO), но - есть ли более простой способ? Я пробовал autocomplete = "on" как в форме, так и в полях ввода - не работает. Браузер - Chrome.
Dmitry z

Ответы:

197

Вы явно устанавливаете значения как пустые? Например:

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

Это должно помешать браузерам помещать данные туда, где они не должны. В качестве альтернативы вы можете добавить autocompleteатрибут в тег формы:

<form autocomplete="off" ...></form>
DisgruntledGoat
источник
1
Я говорю о флажках, поэтому не могу установить значение "". И означает ли отключение автозаполнения не сохранять входные значения формы «когда пользователь нажимает F5», а не только «для раскрывающегося списка автозаполнения»?
queen3
2
Согласно developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion , autcompletion = off влияет на «кеширование истории сеансов», по крайней мере, в Gecko. Я проверю, работает ли это для того, что мне нужно.
queen3
1
@ queen3: Да, флажки представляют собой проблему, поскольку нет возможности явно сказать «не отмечен». Если у вас все еще есть проблемы, вы можете попробовать checked="false", это может работать в некоторых браузерах. Другой альтернативой является использование Javascript / jQuery для явного снятия всех флажков при загрузке страницы.
DisgruntledGoat
1
@ queen3, вы имеете в виду «autocomplete = off», а не «autocompletion = off»
Мэтт Бейкер
2
Все ответы и предложения не помогли мне. Использование хрома и развитие .net
hakan
46

Из ссылки на переполнение стека

Он не работал со значением = "", если браузер уже сохраняет значение, поэтому вам следует добавить.

Для тега input вы можете установить атрибут autocomplete:

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

Вы также можете использовать автозаполнение для формы.

Shareef
источник
9
В Chrome это кажется autocomplete="off"неэффективным при использовании для отдельных элементов формы - даже если valueатрибут явно установлен пустым, и при отправке Cache-Control: Must-Revalidateзаголовка это не имело никакого эффекта. Мне пришлось применить autocomplete="off"атрибут к <form>самому элементу, чтобы подавить такое поведение в Chrome.
mindplay.dk
Я сделал autocomplete = "off" в форме, но у меня это не сработало
Кингсли Саймон
Мне нужна дополнительная информация @KingsleySimon, например, браузер, и у вас могут быть некоторые настройки в вашем браузере, которые мешают правильному поведению
shareef
1
похоже, что поведение браузера изменилось: developer.mozilla.org/en-US/docs/Web/Security/…
Дэвид
и обратите внимание на действительную форму html. и например это не форма внутри другого и т. д.
shareef
10

Другой подход - сбросить форму с помощью JavaScript сразу после формы в HTML:

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

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>
pmko
источник
8

По сути, есть два способа очистить кеш:

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

или

$('#Textfiledid').attr('autocomplete', 'off');
Ананд Двиведи
источник
6

Это сработало для меня в новых браузерах:

autocomplete="new-password"
erikrunia
источник