为什么html表单上的重置按钮不会重置隐藏字段?

问题描述 投票:11回答:4

我发现了令人惊讶的事情:

<html>
<head>
<script type="text/javascript">
function f()
{
document.getElementById("h").value++;
document.getElementById("x").value++;
}
</script>
</head>
<body>

<form>
<input type="hidden" name="hidden" id="h" value="5"/>
<input type="text" id="x" value="5"/>
<input name='clear' type='reset' id='clear' value='Clear'>
</form>

<button type="button" onclick="f()">Increment</button>
<button type="button" onclick="alert(document.getElementById('h').value)">Show hidden</button>

</body>
</html> 

在Firefox 4.0.1中尝试此操作,单击清除始终将文本输入重置为5,但从不重置隐藏字段。

我(和其他人)根本没想到这种行为:我们期望隐藏的值也被重置!

任何人都可以指向解释为什么隐藏输入被重置按钮区别对待的文档或规范?

关于为什么这种行为是可取的解释也是受欢迎的。

html forms reset hidden-field
4个回答
15
投票

FWIW,我想我可以从答案和评论中整理完整的故事。

使用原理:clear按钮用于清除用户输入,由于隐藏的输入不能由用户直接访问,因此允许用户重置隐藏输入的值是没有意义的。

文档和行为:AR指出的bug report明确了解发生的事情:隐藏字段的value模式是default,就像在specs中一样。 特别是,这意味着更改值(如问题中的示例代码中)更改默认值,重置按钮将输入字段重置为默认值,因此没有更改。 文本输入的行为是不同的(即使其值也以编程方式更改),因为它的value模式不是默认值,而是value,这意味着输入的默认值和当前值之间存在区别。


6
投票

用户无法看到或修改隐藏字段,因此按下按钮清除它是没有任何意义的。


3
投票

单击重置时,浏览器会检查DOM树中的默认值,而不是HTML页面中的默认值。

您的Javascript修改了DOM。您应该尝试使用调用Javascript的自定义按钮替换您的RESET按钮,该按钮执行两项操作:

  • 正常重置。
  • 将隐藏字段设置为5

0
投票

我来到这里是因为我碰到了同样的问题。然而,经过进一步的反思,它(通常)是非常理想的行为。

隐藏字段最常用于存储服务器在加载页面时发送的信息。

虽然,脚本也可以使用它来输入一些运行时计算的条目,但重置隐藏字段可能会在不打算时引起麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.