为什么某些技术上可序列化的输入属性不可序列化?

Esa*_*ija 12 html javascript dom

Serializable属性定义为:

  • 当您设置元素的属性时,它将反映在序列化查询中,例如getAttribute,您可以在DOM Inspector中看到更改
  • 当你获得.innerHTML元素的parentnode时,返回的html字符串将包含所有可序列化的属性作为它们的属性对应物

我创建了一个页面,看起来它可以input在Chrome和Firefox中可靠地打印出该元素的所有可序列化属性的表格:http://jsfiddle.net/tEVLp/16/.自定义属性永远不可序列化,因此在firefox webkitSpeech等中不可序列化.在镀铬中测试以获得最佳效果.

所有布尔都是true因为false属性的序列化将缺少属性,这在测试中是假阴性.

所以我的问题是,为什么不是属性.value.checked序列化?

从技术上讲,两者都是可序列化的..value只是一个字符串,浏览器没有序列化其他布尔属性的问题,例如.readOnly.disabled.

我最好的猜测是,由于.defaultValue序列化为"value"-attribute和.defaultChecked序列化到"checked"-attribute,就不会有冲突,因此 .value.checked不能序列.在这种情况下,为什么defaultX选择这些而不是那些反映更有用的电流.value.checked状态的?

Rob*_*b W 13

输入元素规范定义了确切的行为.从这里开始阅读(在之前,定义DOM接口,属性和类型).

简明摘要(value定义类似于checked,为简洁起见,我value只会解释).

"属性" value反映了def,
"属性" value反映了值内容属性def.

  • 该属性定义默认值属性(ref).该值也由属性(ref)反映def.defaultValue
  • 设置value属性后,value属性将更改(ref)*.

措辞非常简洁.我已经跳过了一个重要的细节.此时规范非常清楚,所以我只引用脏值标志部分:

每个输入元素都有一个布尔脏值标志.创建元素时,脏值标志必须初始设置为false,并且只要用户以更改值的方式与控件交互,就必须将其设置为true.

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