Почему флажок остается проверенным при перезагрузке страницы?

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

<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 ответов


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

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

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

Cache-Control: no-store

это, кажется, отключает функцию" запомнить значения формы " Firefox


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


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

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

$(":checkbox").attr("autocomplete", "off");

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

увы, он не работает в SO (вероятно, сброшен JS) и более тупых браузерах, таких как IE...

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


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


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

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1">

$("#showimage").prop ("проверено", false);


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

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

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

$(reset).trigger("click");//to clear the cache and input 
$(checkbox).trigger("click");//to mark checkbox