我有一个ASP.Net网络表单,其中包含文本框字段和隐藏字段。使用客户端JavaScript动态修改隐藏字段值。发布表单,检查值并重定向到另一个页面都按预期工作。
但是,当我使用浏览器后退按钮显示上一页时,我希望看到所有表单字段仍然填充了已发布的值。
在IE和Firefox中,文本和隐藏输入字段都是这种情况。
在Chrome中,这仅适用于文本字段。隐藏字段的值丢失。
在导航浏览器历史记录时,Chrome是否真的会重新填充动态设置隐藏的表单字段值?
我已经将一个小样本放在一起以证明问题,如果需要可以提供。我想先问问题,看看这是否是众所周知的行为以及我必须接受的事情。
答案 0 :(得分:16)
这个问题可以通过一个小技巧来解决。
问题是带有Type = hidden的表单字段,Chrome浏览器无法正确处理动态设置值。
因此解决方案是将字段类型更改为文本,并使用其他方法隐藏可见文本框。这可以通过包含所有意图被DEV标签对隐藏的值的文本框并将样式指定为display来实现:none
然后在页面上你看不到带有隐藏值的文本框,它将与浏览器的JavaScript一起正常工作。
<input type=hidden name=item_no value=00001>
<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使用协议的荒谬的欧盟指令,这对我来说不是一个解决方案。