这是IE9 Beta的一个错误吗?

3

我在我的Web表单中有类似这样的内容:

<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”。这是怎么回事?我漏掉了什么吗?

如果我从字段中删除“value”属性,它也可以在IE9中工作。如果我切换到IE8渲染模式,它也可以在IE9中工作。

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


HTML表单默认值在Internet Explorer中会覆盖实际值。 - EricLaw
有没有人成功地解决了这个问题?我刚刚发现我们在一个项目中唯一的表单在IE9中存在问题...我已经搜索了,但找不到任何好的帮助。 - RickardP
2个回答

2
价值属性被定义为设置初始值
一旦表单已加载,该字段将具有其初始值设置为其实际值。
据我所知,如果在表单加载后更改初始值,没有任何东西说当前值应该更改,因此我会怀疑这是一个错误修复而不是新错误。
请使用value属性而不是setAttribute方法。

你是在告诉我 formField.value 是设置当前值,而 formfield.setAttribute("value") 则是尝试覆盖初始值吗?所以,现在 IE9 已经正确了,而其他所有浏览器都做错了吗? - newtogit
@newtogit:实际上,IE9中很多东西现在都是这样的。如果考虑到IE的历史,这有点让人不安。 - Esko
看起来是这样。可能在规范中有说明应该不同,但我没有看到过(尽管我没有特意去寻找它)。 - Quentin
.value 应该与 setAttribute("value") 相同。我刚测试了一下:确实如此。另外,如果我有一个初始值,当我使用 .value 时,该值不会被发送到服务器。对我来说仍然像个 bug。顺便说一下,如果我打算稍后设置当前值,则无法在表单中使用 value="initial value",因为该当前值不会被提交。顺便说一下,我正在使用 XHTML 1.0 strict。 - newtogit

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的一个错误。


那么,设置内容值的HTML 4正确方法是什么?.value无法完成任务。我需要做什么才能让IE9发送myNewValue?有什么想法吗?感谢您挖掘这个问题! - newtogit

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