Почему флажок остается установленным при перезагрузке страницы? - PullRequest
71 голосов
/ 18 ноября 2008

Я перезагружаю веб-страницу со следующим кодом:

<label for="showimage">Show Image</label>
<input id="showimage" name="showimage" type="checkbox" value="1" />

Даже несмотря на то, что HTML остается в браузере одинаковым для каждой перезагрузки страницы, флажок всегда принимает проверенное значение при перезагрузке. Другими словами, если пользователь устанавливает флажок и перезагружается, флажок по-прежнему установлен.

Есть ли здесь какое-то кэширование?

Редактировать : я попробовал решение Гордона Белла ниже и обнаружил, что это все еще происходит даже после удаления значения = "1". Что-нибудь еще, что я мог бы пропустить?

<label for="showimage">Show Image</label> 
<input id="showimage" name="showimage" type="checkbox" /> 

Ответы [ 8 ]

136 голосов
/ 23 января 2009

Добавьте autocomplete="off" в элемент формы на странице. Недостатком является то, что это недопустимый XHTML, но он устраняет проблему без какого-либо сложного JavaScript.

33 голосов
/ 18 ноября 2008

Да, я считаю, что это кеширование. Я вижу такое поведение на Firefox, например (не Safari, для чего это стоит :)).

вы можете перезагрузить страницу и обойти кеш (в Firefox), используя CTRL - SHIFT - R , и вы увидите, что значение проверки не t carry (обычный CTRL - R , однако, извлекает информацию из кэша)

edit : мне удалось отключить эту сторону сервера в Firefox, установив заголовок элемента управления кэшем:

Cache-Control: no-store

это похоже отключает функцию "запоминания значений форм" в Firefox

29 голосов
/ 14 июля 2009

set autocomplete = "off" с js также работает хорошо.

например, используя jquery:

$(":checkbox").attr("autocomplete", "off");
1 голос
/ 19 ноября 2008

Это хорошая особенность Firefox: если вы что-то печатаете, но перезагружаете страницу, текст остается в текстовой области. То же самое для других настроек, которые вы выбрали.

Увы, он не работает в SO (возможно, сбрасывается с помощью JS) и тупее браузеров, как IE ...

Что предлагает решение: если вам действительно нужно это сделать, сбросьте форму с помощью JS. form.reset () может выполнять эту работу (действует как кнопка сброса ввода).

0 голосов
/ 06 сентября 2017

общественная идея решить эту проблему

сделать форму и кнопку сброса

<form>
<checkbox>
<reset>
</form>

$(reset).trigger("click");//to clear the cache and input 
$(checkbox).trigger("click");//to mark checkbox
0 голосов
/ 15 мая 2017

$ ( "# ShowImage") проп ( "проверено", ложь);.

0 голосов
/ 19 ноября 2008

Это может быть связано с кэшированием в браузере - очень полезно для статических веб-сайтов, которые не меняются слишком часто, очень плохо для динамических веб-приложений.
Попробуйте использовать эти два метатега в разделе заголовка страницы. Второй метатег предназначен для более старых браузеров (IE5), которые не распознают метатег «no-cache» и, хотя разные, дают один и тот же результат: каждый запрос отправляется на сервер.

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1">
0 голосов
/ 19 ноября 2008

или вместо f5 нажмите ввод в адресной строке:)

...