我的网络表单中有这样的内容:
<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。
这是一个错误还是IE9比其他浏览器更符合标准?
答案 0 :(得分:2)
value属性定义为设置initial value。
加载表单后,该字段会将其实际值设置为初始值。
据我所知,如果在表单加载后初始值发生变化,则没有任何内容表示当前值应该更改,因此我怀疑这是一个错误修复而不是新错误。
使用value属性而不是setAttribute方法。
答案 1 :(得分:0)
值内容属性给出了 输入元素的默认值。 当值内容属性为 添加,设置或删除,如果 控件的脏值标志为false, 用户代理必须设置值 元素值的值 内容属性,如果有,或者 否则为空字符串,然后 运行当前值清理 算法,如果定义了一个。
请参阅http://dev.w3.org/html5/spec/the-input-element.html#attr-input-value
您的方案没有描述在setAttribute调用之前设置脏值标志的任何内容,所以我认为setAttribute调用应该设置value属性和 浏览器应该发送myNewValue而不是defaultValue。
所以,是的,我认为这是一个IE9 Beta bug。