備忘録 JavaScript

IE8におけるdocument.allの挙動

2012年8月26日

7月から古いウェブサイトの改修作業を行っている。

今回はデザインの変更のみと聞いていたが、JAVAを修正したり、メインとなるウェブサイトに合わせるように行ったり、仕様が急に変わったりと後から沸々と出てくる作業でてんてこ舞いになっている。

その中の一つであるのがJavascriptの動作だった。

IE8ではdocument.allの仕様が少し変わったみたいだった。

簡単に言えば

document.all("test").lengthと記述するとIE7、IE9は認識してくれるのだが、IE8はundefinedとなる。

IE8が出てから結構経っているのですがこういう動作になっているんだと初めて知りました……

どうやら、IE8ではdocument.all("nameの値")は一つのエレメントとしかみないようです。

つまり同じnameの複数チェックボックスがあっても一番最初のチェックボックスしかみないという動作を起こします。

実際はdocument.all("test")[0].checked = true;とか書いてると思うのでJavascriptエラーが発生すると思いますが……

対処方ではdocument.all["test"].lengthと指定したらいいとのことです。

以下簡単な実験
まずはHTMLから

IE8 JAVASCRIPT TEST
<script type="text/javascript">
// <![CDATA[
function submit(){
	if(document.all){
		if(document.all("test").length != null){
			window.alert("true");
		}
	}
}
// ]]>
</script>

<input type="checkbox" name="test" />テスト1

<input type="checkbox" name="test" />テスト2

<input type="checkbox" name="test" />テスト3

<input onclick="submit();" type="button" value="テスト実行" />

IE7の場合

IE8の場合

IE9の場合

document.allってIE独自なんですよねぇ……
クロスブラウザと考えるならばdocument.getElementByIdかdocument.getElementsByNameを使ったほうがいいと思います。

-備忘録, JavaScript
-, ,