可序列化属性定义为:
getAttribute
.innerHTML
我制作了一个页面,看起来好像它已经可靠地打印了inputChrome和Firefox 中该元素的所有可序列化属性的表://jsfiddle.net/tEVLp/16/。自定义属性从不可序列化,因此在firefox webkitSpeech等中不可序列化。测试镀铬以获得最佳结果。
input
webkitSpeech
所有布尔值都是true因为false属性的序列化将是缺少属性,而该属性在测试中为假阴性。
true
false
所以我的问题是,为什么没有诸如.valueand可.checked序列化的属性?
.value
.checked
从技术上讲,两者都是可序列化的。.value只是一个字符串,浏览器在序列化其他布尔属性(例如.readOnly和)时没有问题.disabled。
.readOnly
.disabled
我最好的猜测是,由于.defaultValue序列化为"value"-attribute并.defaultChecked序列化为"checked"-attribute,因此会发生冲突,因此 .valueand .checked不能序列化。在那种情况下,为什么defaultX选择那些而不是那些反映更有用的电流.value和.checked状态的选择呢?
.defaultValue
"value"
.defaultChecked
"checked"
defaultX
输入元素的规范定义了确切的行为。从这里开始阅读(在此之前,先定义DOM接口,属性和类型)。
简洁的摘要(value定义与相似checked,因此为简洁起见,我value仅作解释)。
“属性” value反映值def, “属性” value反映值内容属性def。
每个输入元素都有一个布尔脏值标志。创建元素时,脏值标志必须最初设置为false,并且每当用户以更改值的方式与控件进行交互时,脏值标志必须设置为true。
值内容属性提供输入元素的默认值。添加,设置或删除值内容属性时,如果控件的脏值标志为false,则用户代理必须将元素的值设置为值内容属性的值(如果有)或为空字符串否则,然后运行当前值清除算法(如果已定义)。