3

Web フォームに次のようなものがあります。

<input type="hidden" name="myField" value="defaultValue" />

後で、一部の Javascript で、ページをサーバーに送信する前にデフォルト値を上書きしています。

var formField = document.getElementsByName("myField")[0];
formField.setAttribute("value", "myNewValue");
var form = document.getElementById("myForm"); 
form.submit();

すべてのブラウザー (このコードは、IE5 から IE8、Firefox、Opera、Chrome、Safari などで何年にもわたってテストしました) は、"myNewValue" をサーバーに送信しています。IE9 以外: 「defaultValue」を送信します。何が起きてる?何か不足していますか?

フィールドから「値」属性を削除すると、IE9 でも機能します。IE8 レンダリング モードに切り替えると、IE9 でも動作します。

これはバグですか、それとも IE9 は他のブラウザよりも標準に準拠していますか?

4

2 に答える 2

2

value 属性は、初期値を設定するように定義されています。

フォームが読み込まれると、フィールドの実際の値が初期値に設定されます。

私の知る限り、フォームが読み込まれた後に初期値が変更された場合、現在の値を変更する必要があるということは何もないので、これはバグ修正であり、新しいバグではないと思います。

setAttribute メソッドの代わりに value プロパティを使用してください。

于 2010-09-26T07:01:32.193 に答える
0

David Dorward は HTML4 に関しては正しいように見えますが、これは下位互換性を破る動作であるように思われるため、ブラウザーが実際に行うことを HTML5 で説明することを期待します。そしてそう思われる。それはこう言っています:(私の強調)

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

http://dev.w3.org/html5/spec/the-input-element.html#attr-input-valueを参照してください

あなたのシナリオでは、setAttribute 呼び出しの前にダーティ値フラグを設定するものは何も記述されていないため、setAttribute 呼び出しで value プロパティを設定し、ブラウザーは defaultValue ではなく myNewValue を送信する必要があると考えています。

はい、IE9 Beta のバグだと思います。

于 2010-09-26T10:03:44.217 に答える