通过JavaScript设置的隐藏字段值即使在页面刷新后仍然保留

3

我遇到了一个非常奇怪的问题。 我有一个隐藏字段如下所示。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
        <script src="http://code.jquery.com/jquery-1.9.0.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:HiddenField ID="hid_test" ClientIDMode="Static" runat='server' />
    </div>
    </form>
<script language="javascript" type="text/javascript">
    $(function () {
        alert($('#hid_test').val());
    });
</script>    
</body>

</html>

在服务器端,我会将一个值设置到隐藏字段中,代码如下:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        hid_test.Value = "abcd"
    End If
End Sub

这是非常简单的代码。所以在第一次运行中,由于我从服务器端进行了设置,因此警报显示为“abcd”。好的…没问题。

然后我使用控制台通过jquery更改了隐藏字段的值,如下所示:

$('#hid_test').val('12');

在这个变化发生后,当我按下F5(页面重新加载)时,显然我的服务器端代码会运行,隐藏域的值应该被改为abcd

但是当页面加载时,警报框中显示的值仍然是12。这意味着它保留了客户端设置的值。如果有任何帮助,将不胜感激。我正在Firefox中测试。

我禁用了FF表单填充功能,如下所示 enter image description here

2个回答

3
默认情况下,Firefox会自动填充先前表单中的值。如果关闭此功能,则不会再看到该行为。似乎这个问题及其答案表明,在HTML中没有简单的方法告诉Firefox不要这样做;相反,那里的答案集中于在加载/卸载时使用JavaScript设置字段值(例如,在加载时覆盖Firefox自动填写的内容,在卸载时鼓励Firefox记住页面作者想要记住的值)。

那么FF是罪魁祸首吗?我花了两天时间。谢谢,伙计。但只是想知道...这真的是浏览器中的错误特性,对吧?因为如果任何服务器端更改被浏览器替换听起来完全是错误的。 - Sandeep Thomas
@sforsandeep:是的,这是Firefox常见的问题。如果你关闭它,你应该能够验证它(因为,你知道,我可能是错的 :-))。 - T.J. Crowder
@sforsandeep:不一定是一个错误;有时它会妨碍我们想要做的事情,但这是一种功能。其想法是通过记住您之前填写过的内容来帮助您,以便您将来不必重复执行此操作。覆盖来自服务器的内容对于该功能至关重要。 - T.J. Crowder
我禁用了该功能(如果我做错了,请原谅),但问题仍然存在。请检查我在问题中的编辑。但在 Chrome 中没有这个问题。 - Sandeep Thomas
@sforsandeep:不错的交易。我只希望有一种方法可以标记一个字段,以便我们可以说“不,真的,手离开——我们控制这里的默认值。” :-) - T.J. Crowder
显示剩余3条评论

1
添加 autocomplete="off" 标签。

1
完美的答案。 - xavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接