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

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

<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. Ни один из ответов, которые я пробовал, не разрешил это, но для меня это решило просто следующее:

    document.getElementById('formId').reset();

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам