Chrome не кэширует скрытые значения полей формы для использования в истории браузера. - PullRequest
15 голосов
/ 26 октября 2010

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

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

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

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

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

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

Ответы [ 3 ]

16 голосов
/ 17 июня 2011

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

Проблема в том, что поля формы с типом = скрыто с динамически установленными значениями не обрабатываются браузером 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>
4 голосов
/ 26 октября 2010

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

0 голосов
/ 12 февраля 2012

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

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

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

...