0

私はフォームを動的に作成し、要素を次のように追加しています:

var input = document.createElement('input');
input.name = extension_id + '[]';
input.value = value.id;
input.className = 'changeable';
input.type = 'radio';
input.checked = true;
wrapper_div.appendChild(input);

生成された HTML の例 (これは Chrome のものです):

<input name="2[]" class="changeable" type="radio" value="5">

Chrome および Firefox では、javascript:

document.getElementsByName("2[]")[0].value

期待どおり「5」を返しますが、IE(私のテストではIE9)では「on」を返します。

IE が値セットを無視し、代わりにチェック済みステータスを返す理由はありますか?

4

1 に答える 1

3

基本的に、値が無視されることはあまり問題ではなく、IE の 1 つが要素をオブジェクト (ラジオ ボタン) として扱い、そのように初期化します。

デバッガーを開いてコードをステップ実行すると、値 5 が実際に設定されていることがわかります。入力のタイプを設定する行に到達すると、つまり、input.type='radio'この値が 5 から 'on' に変化することがわかります。入力が実際にラジオ ボタンであることを認識した瞬間に、IE がラジオ ボタンのコンストラクターを呼び出すと考えてください。

修正?

この場合は簡単です。ステートメントの順序を変更するだけです。うん!そのような単純な。タイプ設定してから、値を設定します。

これは IE9 と Chrome で問題なく動作します。

{
    var extension_id = 2;
    var input = document.createElement('input');
    input.name = extension_id + '[]';
    input.type = 'radio';
    input.checked = true;
    input.value = 5;
    input.className = 'changeable';
    document.body.appendChild(input);

    alert(input.value);
}

ああ、忘れる前に - F12 を使用して IE でデバッガーを開くことができます。- 使い方のビデオがたくさんあります。:)

于 2012-11-08T12:17:18.403 に答える