ラジオボタンのチェックが効かない

[新着] Webテンプレートを仮オープンしました



0   名前: naokun : 2006/10/13(金) 12:25  ID:HsrxHP7o
タグではうまくいくのですが、
コードで追加したラジオボタンのチェックが効きません。
アラートを使ってnameを確認すると、
ちゃんと"group1"となってるのに、なぜでしょうか…
よろしくお願いします。

●うまくいく場合(当然ですが…)
<input type = "radio" value="0" name = "group1" ></input>
<input type = "radio" value="1" name = "group1"  ></input>

●うまくいかない場合
var oParent = document.getElementsByTagName("BODY").item(0) ;

var oTest	  = document.createElement("INPUT");
oTest.type = "radio" ;
oTest.name = "group1" ;
oTest.value= "0" ;
oTest.checked = "true" ;
oParent.appendChild(oTest);
	
var oTest1 = document.createElement("INPUT");
oTest1.type = "radio" ;
oTest1.name = "group1" ;
oTest1.value= "1" ;
oParent.appendChild(oTest1);

1   名前: NullPo : 2006/10/13(金) 12:25  ID:Z0FHbpib
oTest.defaultChecked = true;

とやるとどうなりますか?

2   名前: naokun : 2006/10/13(金) 12:25  ID:HsrxHP7o
NullPo 様、ありがとうございます。

なるほど〜、oTest の方にはチェックが付きました。
しかし、oTest1をクリックしてもチェックが移りません。

う〜ん…

3   名前: Chip : 2006/10/13(金) 12:25  ID:iXTrKUp6
Firefoxでは問題ないですね。
適当なキーワード(dom input 追加 name ie バグ)で検索してみましたがnameがちゃんと解釈されないIEのバグっぽいですね。
http://www.gac.jp/article/index.php?stats=question&category=9&id=4474&command=msg
http://cast-a-spell.at.webry.info/200603/article_7.html

解決策はわかりません。
(innerHTMLで追加するってのは成功するようですが)

4   名前: naokun : 2006/10/13(金) 12:25  ID:HsrxHP7o
Chip様、ありがとうございます。
ありゃ〜バグですか…

明日innerHTMLやってみます。

5   名前: 匿名 : 2006/10/13(金) 12:25  ID:KoXM9/m5
>>0
> oTest.checked = "true" ;

…まぁ型変換されるけどさ。

それで、>>3で触れられているが、IEでのcreateElement('input')はtype="text"で作成される。
他のtypeで作成するときはcreateElement('<input type="radio"')と書かねばならない。

MSDNにも書いてある有名な馬鹿「仕様」だ。
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createelement.asp

6   名前: NullPo : 2006/10/13(金) 12:25  ID:1Bb3RL38
>>2, 5
確かにチェックできませんね。
そんな仕様とは知りませんでした。

で、今テストしてみたのですが、typeどころか、nameまでいれないとダメみたいですね。

  var input = document.createElement("<input type='radio' name='group1'>");
  var input2 = document.createElement("<input type='radio' name='group1'>");

  document.body.appendChild(input);
  document.body.appendChild(input2);

valueとかは多分あとで追加して大丈夫だと思います。

でもこんなの、解釈してくれるのIEだけだと思うのでinnerHTMLのほうがまだ幅広いですね。

7   名前: naokun : 2006/10/13(金) 12:25  ID:HsrxHP7o
匿名 様

> oTest.checked = "true" ;

  ホントだ…お恥ずかしい…(^^;)

>MSDNにも書いてある有名な馬鹿「仕様」だ。

  ナルホド、要するにtypeはtextで生成され、
  後からtypeの変更は出来ない(見た目やtype値は変わるが…)ので、
  name属性は関連付けの意味をなさないって感じでしょうか。

NullPo 様

>createElement("<input type='radio' name='group1'>");

  確かにこれで出来ました。
  社内向け開発なので、IE限定で行きます。


皆様、いろいろありがとうございました。
m(__)m

一覧へ戻る