Подтвердить что ты не робот

Chrome не кэширует скрытые значения полей формы для использования в истории браузера

У меня есть веб-форма ASP.Net, которая содержит как поля текстовых полей, так и скрытые поля. Значения скрытого поля динамически изменяются с использованием JavaScript на стороне клиента. Публикация формы, проверка значений и перенаправление на другую страницу работают должным образом.

Однако, когда я использую кнопку "Назад назад", чтобы отобразить предыдущую страницу, я ожидаю, что так что все поля формы по-прежнему заполняются значениями, которые были опубликованы.

В IE и Firefox это относится как к текстовым, так и скрытым полям ввода.

В Chrome это ТОЛЬКО для текстовых полей. Значение скрытых полей теряется.

Правда ли, что при навигации в истории браузера Chrome никогда не обновляет динамические значения динамически заданных скрытых форм?

Я поставил небольшой образец вместе, чтобы продемонстрировать проблему, и может предоставить, если это необходимо. Я хотел сначала задать вопрос, чтобы узнать, хорошо ли это поведение и что я должен принять.

4b9b3361

Ответ 1

Вы не должны полагаться на это поведение. Он отличается от браузеров, даже среди версий браузера. Такое поведение не описывается ни в каких стандартах. Если вы хотите, чтобы ваши поля имели определенные значения, вы можете использовать файлы cookie или всегда делать запросы на сервер при загрузке страницы или использовать более современные методы, такие как локальное хранилище (оно широко не поддерживается).

Ответ 2

Эта проблема может быть решена с помощью небольшого трюка.

Проблема: поля формы с типом = скрытые с динамически установленными значениями не обрабатываются браузером Chrome.

Итак, решение состоит в том, чтобы изменить тип поля на текст и использовать какой-либо другой метод, чтобы скрыть видимые текстовые поля. Это может быть достигнуто за счет окружения всех текстовых полей, несущих значения, которые должны быть скрыты с помощью пары тегов DEV и назначения стиля как отображения: none

Затем на странице вы не увидите текстовые поля, содержащие скрытые значения, и она будет корректно работать с JavaScript браузера.

перед

<input type=hidden name=item_no value=00001>

после

<div style="display: none">
    <input type=text name=item_no value=00001>
</div>

Ответ 3

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

Я просто столкнулся с этой проблемой в Opera, поэтому заимствовал решение Sanesh Fernando, которое работало вокруг скрытых полей, которые не восстанавливаются (спасибо Sanesh). Однако причиной для меня было то, что Javascript срабатывает до того, как поля формы будут обновлены, поэтому, если вы проверите значения с javascript, как я это делал, мне пришлось добавить setTimeout, чтобы обеспечить обновление Opera до того, как я проверил значения.

Файлы cookie, как указано другим образом, но что с нелепой директивой ЕС о том, что требование использования cookie от пользователя не является для меня решением.