InternetExplorer(以下 IE)という糞ブラウザも、それを「業務で使用する標準ブラウザ」に選定する情報システム部門も大嫌いだ!・・・と叫びたい夜であります。
今、IE11 を使ったテストをしているんですが、例えば、ラジオボタンの内容が変更されたかどうかのチェックを、初期状態が
<input type="hidden" name="OLD_FLG" value="1"><input type="radio" name="FLG" value="0">0番<input type="radio" name="FLG" value="1" checked>1番<input type="radio" name="FLG" value="2">2番
という FORM で行います。
OLD_FLG に現在の DB の内容 '1' がセットされ、value="1" のラジオボタンが checked な状態になっているわけですな。この HTML は PHP のプログラムで動的に吐き出しています。
この状態で、例えば「2番」にチェックし、submit すると、
if (window.document.form.elements[FLG].value !=window.document.form.elements[OLD_FLG].value) {<以下略>
みたいな JavaScript が走って、OLD_FLG と FLG の内容が違えば、変更が行われたと判断して別の Function が走ったりするわけですな。
Chrome でも Firefox でも問題なく動いています。
上記のような場合は、window.document.form.elements[FLG].value に '2' が、window.document.form.elements[OLD_FLG].value には '1' がセットされているので、ラジオボタンが更新されたな・・・という判断が出来るというわけです。
ところが、IE11 だけ処理が落ちちゃうんよねえ、途中で。
原因は、上記 JavaScript が走った時点で、window.document.form.elements[FLG].value が undefined だから。
どうも、IE11 では FLG 配列の中のどれが実際に checked な状態になっているかを調べて、その値で比較をしないと駄目なようですな。
具体的には、
var wk_flg = document.form.elements[FLG];for (var i = 0; i < wk_flg.length; i++) {if (wk_flg[i].checked == true) {if (wk_flg[i].value == window.document.form.elements[OLD_FLG].value) {<以下略>
みたいな面倒くさいことをしなくちゃいけない。
InternetExplorer 信者は「こっちの方が正しい!」とか戯言を言いそうだけど、JavaScript が実行された時、その時点の画面の状態(FORM の入力状態)が有効になっていると考えるのが自然だろう。チェックされている radio ボタンの value 値が「undefined 」というのは不自然やわあ。
「どちらのやり方でもいい」は有りだとしても(実際、Chrome や Firefox はどっちのやり方でもOK)、配列としてひとつひとつ checked になっているかチェックして、その値をそのラジオボタンの選択値とする・・・なんてやり方は無しやで。
ほんま、なんでこんな糞ブラウザを有り難がる輩がいるのか理解に苦しむ。日本の Web プログラマのレベルの低さの現れか・・・
さっさと IE なんか捨て去っちゃえばいいのに、「OS パッケージに最初から含まれている」という理由だけで使っちゃうんだよなあ。
正直、企業内で IE を使い続けているというのは、情報システム部門(担当)の怠慢だと思う。
コメントする