16

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

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

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

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

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

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

4

3 回答 3

19

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

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

所以解决方法是将字段的类型更改为文本并使用其他方法隐藏可见的文本框。这可以通过包围所有带有要被 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>
于 2011-06-17T10:10:47.147 回答
5

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

于 2010-10-26T17:17:19.757 回答
0

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

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

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

于 2012-02-12T06:03:41.777 回答