HTAの落とし穴(ラジオボタンの怪)
HTAではまったのでメモ。ラジオボタンをDOM生成していると、getElementsByNameで取得できないらしい。以下、検証コード <body><input type="radio" name="radio"><script type="text/javascript">var r1=document.createElement( 'input' );var r2=document.createElement( 'input' );var r3=document.createElement( 'input' ); r1.type='radio' r2.type='radio' r3.type='radio' r1.name='radio' r2.name='radio' r3.name='radio' document.body.appendChild( r1 ) document.body.appendChild( r2 ) document.body.appendChild( r3 )alert( 'input要素数は' + document.getElementsByTagName( 'input' ).length )alert( 'name属性がradioである要素数は' + document.getElementsByName( 'radio' ).length )alert( '自作関数で数えると' + getRadios( 'radio' ).length )function getRadios( name ){ var ret =[]; var inputs =document.getElementsByTagName( 'input' ) for( var i = 0, len = inputs.length; i < len; i++ ){ if ( inputs[ i ].type != 'radio' ){ continue; } if ( inputs[ i ].name != name ){ continue; } ret.push( inputs[ i ] ); } return ret;}</script></body> 1個はHTMLに記述、3個をDOMで生成してるんだけれど、走らせると二番目のアラートで「name属性がradioである要素数は1」となってしまう。 仕方ないんで自作関数でしのいでいたのですが、 <meta http-equiv="X-UA-Compatible" content="IE=8" />の一行を追加すると正常動作になりました。IE7以前の仕様(?)だったんですね。