そんな事がありました。
で終わるわけにもいかんか。
実際タイトル通りで、IE6どころかIE自体使ってない僕には関係ない事ですが、使う人の事は考えないといかんわけで。
"form_obj.elements[2].value"みたいな事してたんだけど、他のブラウザでも動くしIEでも動いてたんだけど、何故か『起動した直後のIE6で最初にそのサイトにアクセスした時』だけ、elementsの順序が違うという謎の挙動。
という事でelements使わないでjQueryのセレクタでアクセスするようにした。
アクセスしてるのがselectだったんだけど、その前後もselectで本来どれ選択しててもパラメータが入ってないといけない所なのに、その前後のselectでvalueが空の奴がデータとして選択されて、しかもそのまま次のページに値を渡してしまうのでそのページで留まらないとかいう状態だったので発見に時間かかった。
エラーが出るのは次ページなので・・・
まぁDOMとかでelementsの順序なんて規定されてないんだろうし、そんな所に頼ったプログラム組むなっつー話なんだろうけど、なんかとほほな感じだった。
-------------------------
それとは関係無いけど、その次にぶつかったバグはIE7固有だった。
selectのjQueryオブジェクト取得してhtml()で値をセットした時、select自体には反映されるけど前後の要素の位置とかが調整されないのでselectが重なったりするバグ。
IE6も含む他のブラウザでは動くんだけど、IE7のバグなのかjQueryのバグなのか。
jQureryのhtmlは値がセットされる時には内部的にempty()してからappend()する。
emptyは子要素全部のremove呼んでからremoveChild呼んでる。
removeはevents消してからremoveData呼んでる。
removeDataはelementをdeleteしてたりremoveAttributeが呼ばれたりしてた。
appendは内部的にはappendChildが呼ばれてるだけ。
って事でappendChildの結果、selectboxの幅とかがoptionの文字列の流さに合わされて自動修正されても、その回りのオブジェクトには伝搬しない事が分かった。
ので、html()の呼び出し後に明示的にちょっと構造変えて位置を合わせてやる必要がありましたとさ。
コメントする