我发现了令人惊讶的事情:
<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
,但永远不会重置隐藏字段。
我(和其他人)根本没想到这种行为:我们预计隐藏值也会被重置!
任何人都可以指出解释为什么隐藏输入被重置按钮区别对待的文档或规格?
关于为什么这种行为是可取的解释也是受欢迎的。
答案 0 :(得分:15)
FWIW,我想我可以从答案和评论中整理完整的故事。
使用原理清除按钮用于清除用户输入,由于用户无法直接访问隐藏的输入,因此允许用户重置隐藏的输入是没有意义的值。
文档和行为:
AR指出的bug report明确指出发生了什么:隐藏字段的value
模式为default,与specs中的模式相同。
特别是,这意味着更改值(如问题中的示例代码中)更改默认值,重置按钮将输入字段重置为默认值,因此没有更改。
文本输入的行为是不同的(即使其值也以编程方式更改),因为其value
的模式不是默认值而是value,这意味着默认值的区别是输入和当前值。
答案 1 :(得分:6)
用户无法看到或修改隐藏字段,因此按下按钮清除它是没有任何意义的。
答案 2 :(得分:3)
当点击重置时,浏览器会检查DOM树中的默认值,而不是HTML页面中的默认值。
您的Javascript修改了DOM。您应该尝试使用调用Javascript的自定义按钮替换您的RESET按钮,该按钮执行两项操作:
5
。答案 3 :(得分:0)
我来这里是因为遇到同样的问题。但是,经过进一步思考,这通常是非常理想的行为。
隐藏字段最常用于存储页面加载时服务器发送的信息。
尽管,脚本也可以使用它来输入一些运行时计算的条目,重置隐藏字段会在不希望出现的情况下引起麻烦。