【发布时间】:2014-03-26 11:48:16
【问题描述】:
我注意到浏览器和不同类型的表单元素之间的行为差异,当表单元素的 DOM 属性设置为与来自同一元素的属性的当前状态冲突时。
看 http://jsfiddle.net/Ldf2s/7/
document.forms['foo'].bar.checked=false;
document.forms['foo'].bar.setAttribute("checked", "true");
document.forms['foo'].baz.value = 'prop value';
document.forms['foo'].baz.setAttribute("value", "attr value");
在 IE 9 中:文本输入和复选框的属性均胜出(显示“prop value”且未选中)
在 Chrome 中:属性胜过文本输入的属性(显示“prop value”)但复选框已选中。
为什么文本输入和复选框有区别,为什么只有 Chrome 才有区别?
优先级应该是什么?如果更改 DOM 属性,是否应该覆盖当前表单输入状态?
【问题讨论】:
-
"checked" 的行为类似于属性,而不是属性。您需要使用 .setAttribute("checked", "checked"),而不是 true/false。
-
'checked' 属性的值无关紧要——只有它的存在与否。问题是关于 foo.checked 与 foo.setAttribute("checked")。
标签: javascript html internet-explorer google-chrome