Chrome不会缓存隐藏的表单字段值,以便在浏览器历史记录中使用

时间:2010-10-26 16:42:52

标签: google-chrome browser-history hidden-fields back-button

我有一个ASP.Net网络表单,其中包含文本框字段和隐藏字段。使用客户端JavaScript动态修改隐藏字段值。发布表单,检查值并重定向到另一个页面都按预期工作。

但是,当我使用浏览器后退按钮显示上一页时,我希望看到所有表单字段仍然填充了已发布的值。

在IE和Firefox中,文本和隐藏输入字段都是这种情况。

在Chrome中,这仅适用于文本字段。隐藏字段的值丢失。

在导航浏览器历史记录时,Chrome是否真的会重新填充动态设置隐藏的表单字段值?

我已经将一个小样本放在一起以证明问题,如果需要可以提供。我想先问问题,看看这是否是众所周知的行为以及我必须接受的事情。

3 个答案:

答案 0 :(得分:16)

这个问题可以通过一个小技巧来解决。

问题是带有Type = hidden的表单字段,Chrome浏览器无法正确处理动态设置值。

因此解决方案是将字段类型更改为文本,并使用其他方法隐藏可见文本框。这可以通过包含所有意图被DEV标签对隐藏的值的文本框并将样式指定为display来实现:none

然后在页面上你看不到带有隐藏值的文本框,它将与浏览器的JavaScript一起正常工作。

BEFORE

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

AFTER

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

答案 1 :(得分:4)

您不应该依赖此行为。它在浏览器中是不同的,即使在浏览器版本中也是任何标准都没有描述此行为。如果您希望您的字段具有特定值,您可以使用cookie,或者在页面加载时始终向服务器发出请求,或者使用更现代的方法(如本地存储)(尽管它没有得到广泛支持)。

答案 2 :(得分:0)

我似乎无法评论,也许我的代表太低但觉得这很重要。

我刚刚在 Opera 中遇到了这个问题,所以借用了Sanesh Fernando的解决方案,解决了隐藏字段未被恢复的问题(感谢Sanesh)。然而,给我带来问题的是Javascript在表单字段更新之前触发,所以如果你像我一样用javascript检查值,那么我必须添加一个setTimeout以确保在检查值之前更新Opera。

Cookie是另一种说法,但是对于要求访问者提供cookie使用协议的荒谬的欧盟指令,这对我来说不是一个解决方案。