12

シリアル化可能なプロパティは次のように定義されます。

  • 要素のプロパティを設定すると、次のようなシリアル化クエリに反映されgetAttribute、DOMInspectorで変更を確認できます。
  • 要素の親ノードを取得する.innerHTMLと、返されるhtml文字列には、対応する属性としてすべてのシリアル化可能なプロパティが含まれます。

inputChromeとFirefoxの要素のすべてのシリアル化可能なプロパティのテーブルを確実に印刷しているように見えるページを作成しました:http: //jsfiddle.net/tEVLp/16/。カスタムプロパティはシリアル化できないため、FirefoxwebkitSpeechなどではシリアル化できません。最良の結果を得るには、クロムでテストしてください。

すべてのブール値はtrue、プロパティのシリアル化がfalseテストで偽陰性である属性の欠如であるためです。

だから私の質問は、なぜ.value.checkedシリアル化できるようなプロパティではないのですか?

技術的には、両方ともシリアル化可能です。.valueは単なる文字列であり、ブラウザはやなどの他のブールプロパティのシリアル化に問題はありませ.readOnly.disabled

私の推測では、-attributeにシリアル化して-attributeに.defaultValueシリアル化するため、競合が発生し、とを シリアル化できません。その場合、なぜこれらのために選ばれたものであり、より有用な現在と状態を反映するものではないのですか?"value".defaultChecked"checked".value.checkeddefaultX.value.checked

4

2 に答える 2

13

入力要素の仕様は、正確な動作を定義します。ここから読み始めます(その前に、DOMインターフェース、属性、およびタイプが定義されています)。

簡潔な要約(valueと同様に定義されてcheckedいるため、簡潔にするために、説明valueのみを行います)。

「プロパティ」はdefvalueを反映し、 「属性」は値コンテンツ属性defを反映します。
value

  • この属性は、デフォルト値のプロパティrefを定義します。この値は、プロパティ(ref )によってdefにも反映されます。defaultValue
  • value属性が設定されると、valueプロパティが変更されます(ref)*。

それは非常に簡潔に表現されました。重要な詳細はスキップしました。この時点で仕様は非常に明確なので、ダーティバリューフラグのセクションを引用します。

各入力要素には、ブール値のダーティ値フラグがあります。ダーティ値フラグは、要素の作成時に最初にfalseに設定する必要があり、ユーザーが値を変更する方法でコントロールを操作するときは常にtrueに設定する必要があります。

value content属性は、入力要素のデフォルト値を示します。値コンテンツ属性が追加、設定、または削除されたときに、コントロールのダーティ値フラグがfalseの場合、ユーザーエージェントは要素の値を値コンテンツ属性の値(存在する場合)または空の文字列に設定する必要がありますそれ以外の場合は、現在の値のサニタイズアルゴリズムが定義されている場合は、それを実行します。

于 2012-08-02T14:20:19.337 に答える
2

valueおよびcheckedプロパティはHTML属性に対応していないため、HTMLにシリアル化することはできません。defaultXプロパティが属性にマップされる理由についてはx、よくわかりません。別の方法であるx、属性にマッピングされ、現在の値を表すxなどの別のプロパティを持つプロパティcurrentXは、一般にスクリプトがデフォルト値よりも頻繁に現在の値を必要とするため、少し直感的ではないようです。

于 2012-08-02T14:01:05.383 に答える