Почему флажок остается проверенным при перезагрузке страницы?
Я перезагружаю веб-страницу со следующим кодом:
<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() может выполнить эту работу (действует как кнопка сброса ввода).
это может быть связано с кэшированием браузера-очень полезно для статических веб-сайтов, которые не меняются слишком часто, очень плохо для динамических веб-приложений.
попробуйте с этими двумя метатегами в разделе head страницы. Второй мета-тег предназначен для старых браузеров (IE5), которые не распознают мета-тег "без кэша" и, хотя разные, дают один и тот же результат: каждый запрос идет на сервер.
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="-1">
общественная идея решить это
сделать форму и кнопку сброса
<form>
<checkbox>
<reset>
</form>
$(reset).trigger("click");//to clear the cache and input
$(checkbox).trigger("click");//to mark checkbox