かえでBlog

色々なことを徒然と……

IE8におけるdocument.allの挙動

      2013/04/29

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から





IE7の場合


IE8の場合


IE9の場合


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

 - JavaScript, 備忘録 , ,