2016-04-07 11 views
6

、これら2つの行を実行します。なぜそれが異なりなぜ、setAttribute経由で入力の値を設定するか、直接入力の値を設定するかの違いはありますか?デベロッパーツールで

1.

window.x = document.createElement("input"); 
x.type="text"; 
x.name="nm"; 
x.value="val"; 
x 
// <input type="text" name="nm"> 

2.

window.x = document.createElement("input"); 
x.type="text"; 
x.name="nm"; 
x.setAttribute("value", "val"); 
x 
// <input type="text" name="nm" value="val"> 

を印刷になるだろうか?どちらの場合でも値は適切に設定されているようです。プロパティとDOM属性の間に切断があるようです。

また、プロパティ.valueのゲッターは.getAttribute('value')の結果とは異なります。私はsetAttribute()一日中、.valueは古い値を返します。

+0

(設定値は、直接値プロパティを使用して)。 value属性は、ロード時の値を設定します(フルストップ)。あなたは通常、単に 'value'を必要とします。これは入力の真の値です。これはマークアップには反映されませんが。 – Liam

+1

多くの属性とDOMプロパティがマップされています。 'value'属性/プロパティには[より長いもの](https://www.w3.org/TR/html5/forms.html#value-sanitization-アルゴリズム)私が見た関係の仕様をマッピングします... –

答えて

2

両方のアプローチの主な違いは、基になるdefaultValueプロパティの設定です。 setAttributeを使用すると、defaultValueプロパティとvalueプロパティの両方が更新/設定されます。 .valueを使用すると、valueのプロパティのみが更新/設定されます。

動作1:(setAttributeメソッドを使用して設定値)

x.setAttribute("value","test"); 
x.defaultValue; //"test" 
x.value; //"test" 

動作2:値および値属性は、2つの異なるものがあるので

x.value = "test"; 
x.defaultValue; //"" 
x.value; //"test" 
+0

これに関する任意のドキュメントがありますか? – Lewis

+0

@Tresdin私はそれを読んで、私はそれを知っていた。これについての引用を私にさせてください。 –

+1

@TresdinここでdefaultValueの定義を読んでください。 _要素のtype属性の値が "text"、 "file"または "password"の場合、これは要素のHTML値属性を表します。対話型ユーザーエージェントの対応するフォームコントロールの内容が変更された場合、この属性の値は変更されません._ https://www.w3.org/TR/DOM-Level-2-HTML/html.html# ID-6043025 –

関連する問題