Зробіть сторінку, щоб вказати браузеру не кешувати / зберігати вхідні значення


116

Більшість браузерів кешують форму вхідних значень. Отже, коли користувач оновлює сторінку, вхідні дані мають однакові значення.

Ось моя проблема. Коли користувач натискає кнопку " Зберегти" , сервер перевіряє дані POSTed (наприклад, перевірені продукти), і якщо вони не дійсні, надсилає їх назад у браузер. Однак, як зазначено вище, навіть якщо сервер очищає вибір для деяких значень, вони все одно можуть бути обрані через кеш браузера!

Мої дані мають невидимі (поки не вибрано батьківський елемент) прапорці, тому користувач може навіть не усвідомлювати, що якесь попереднє значення все ж вибрано, доки знову не натисне кнопку " Зберегти" і не з’явиться повідомлення про помилку - навіть якщо користувач вважає, що це не так. Що дратує.

Це можна вирішити, роблячи Ctrl+ F5, але це навіть не рішення. Чи існує автоматичний / програмний спосіб сказати браузеру не кешувати вхідні дані форми на якійсь формі / сторінці?


1
Це <form autocomplete="off"...варіант для вас? Чи ця проблема виникає у всіх браузерах чи лише в одному конкретному?
Девід Колар

Чи є спосіб відповісти на це питання з посиланням на випадаючі <select>списки. У мене є список і я визначив selectedвибір, але оновлення сторінки зберігає попередні обрані параметри.
Мартін

Я хочу досягти протилежного - збережіть вхідні значення кожної сторінки на кнопці "Назад" (натисніть назад двічі, отримайте введення відповідно). Існують різні приклади використання багато JS-коду, (який насправді не працює IMHO), але - чи є простіший спосіб? Я спробував autocomplete = "on" як у формі форми, так і в полях введення - не працює. Браузер - це Chrome.
Дмитро z

Відповіді:


197

Ви явно встановлюєте значення як порожні? Наприклад:

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

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

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

1
Я говорю про прапорці, тому не можу встановити значення "". І чи означає автоматичне заповнення означає не зберігати значення введення форми ", коли користувач натискає F5", а не лише "для випадаючого списку автозаповнення"?
queen3

2
За даними developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion , autcompletion = off впливає на "Кешування історії сеансів", принаймні в Gecko. Я перевірю, чи працює він на те, що мені потрібно.
queen3

1
@ queen3: Так, прапорці - це проблема, оскільки немає способу прямо сказати "не перевірено". Якщо у вас все ще виникають проблеми, ви можете спробувати checked="false", це може працювати в деяких браузерах. Інша альтернатива - використовувати Javascript / jQuery, щоб явно знімати прапорці з усіх прапорців під час завантаження сторінки.
НезадоволенеЗаключення

1
@ queen3, ви маєте на увазі "autocomplete = off" not "autocompletion = off"
Метт Бейкер

2
Всі відповіді та пропозиції не працювали для мене. Використання хрому та розробки .net
хакан

45

З посилання на переповнення стека

Не працює з value = "", якщо браузер вже зберігає значення, тому ви повинні додати.

Для тегу введення є атрибут автозаповнення, який ви можете встановити:

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

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


9
У Chrome, схоже, це autocomplete="off"не має ефекту, коли використовується для окремих форм-елементів - навіть із valueатрибутом, явно встановленим порожнім, і при надсиланні Cache-Control: Must-Revalidateзаголовка це не мало ефекту. Мені довелося застосувати autocomplete="off"атрибут до самого <form>елемента, щоб придушити цю поведінку в Chrome.
mindplay.dk

Я зробив автозаповнення = "вимкнено" у формі, але це не працювало для мене
Кінгслі Сімон

мені потрібна додаткова інформація @KingsleySimon, як браузер, і у вас можуть бути налаштування у вашому браузері, які перешкоджають правильній поведінці
shareef

1
схоже, що поведінка браузера змінилася: developer.mozilla.org/en-US/docs/Web/Security/…
david

і слід зазначити дійсну форму HTML. і, наприклад, його не формують всередині іншого тощо
shareef

10

Іншим підходом було б скидання форми за допомогою JavaScript відразу після форми в HTML:

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

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

8

В основному, є два способи очищення кешу:

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

або

$('#Textfiledid').attr('autocomplete', 'off');

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.