3

我的网络表单中有这样的内容:

<input type="hidden" name="myField" value="defaultValue" />

稍后,在某些 Javascript 中,我在将页面提交到服务器之前覆盖了默认值。

var formField = document.getElementsByName("myField")[0];
formField.setAttribute("value", "myNewValue");
var form = document.getElementById("myForm"); 
form.submit();

所有浏览器(我多年来在 IE5-IE8、Firefox、Opera、Chrome、Safari 等中测试此代码)都将“myNewValue”发送到服务器。IE9 除外:它发送“defaultValue”。这里发生了什么?我错过了什么吗?

如果我从字段中删除“值”属性,它也适用于 IE9。如果我切换到 IE8 渲染模式,它也适用于 IE9。

这是一个错误还是 IE9 比其他浏览器更符合标准?

4

2 回答 2

2

value 属性定义为设置初始值

加载表单后,该字段的实际值将设置为其初始值。

据我所知,如果在表单加载后初始值发生变化,没有什么说当前值应该改变,所以我怀疑这是一个错误修复而不是一个新错误。

使用 value 属性而不是 setAttribute 方法。

于 2010-09-26T07:01:32.193 回答
0

关于 HTML4,David Dorward 似乎是正确的,但这似乎是破坏向后兼容性的行为,所以我希望 HTML5 能够描述浏览器的实际操作。它似乎。它是这样说的:(我的重点)

value 内容属性给出了输入元素的默认值。 在添加、设置或删除 value 内容属性时,如果控件的脏值标志为 false,则用户代理必须将元素的值设置为 value 内容属性的值,如果有,则为空字符串否则,然后运行当前值清理算法(如果已定义)。

http://dev.w3.org/html5/spec/the-input-element.html#attr-input-value

您的场景没有描述任何会在 setAttribute 调用之前设置脏值标志的东西,所以我认为 setAttribute 调用应该设置 value 属性,并且浏览器应该发送 myNewValue 而不是 defaultValue。

所以是的,我认为这是一个 IE9 Beta 错误。

于 2010-09-26T10:03:44.217 回答