Fóruns: Open Discussion (Thread #30580)

IE9での予定編集のときの「終了日による指定」のjscalendarの表示位置 (2011-10-11 15:46 by domifara #60013)

IE9での予定編集のとき
「終了日による指定」のjscalendarの表示位置が、全日オプション行あたりの上に画面を外れる表示をします。
firefox(6.02)では、「終了日による指定」の横にキチンと表示されます。

IE9だけでの症状と思われますが?特定できてません

RE: IE9での予定編集のときの「終了日による指定」のjscalendarの表示位置 (2011-10-12 14:03 by domifara #60027)

IE9でカレンダーの位置がずれる箇所を特定しました。
calendar.jsの line 1393からの
[code]
if (Calendar.is_ie) {
br.y += document.body.scrollTop;
br.x += document.body.scrollLeft;
} else {
br.y += window.scrollY;
br.x += window.scrollX;
}
[/code]
このis_ieのときに、document.body.scrollTopを加算していますが、
IE9のときは、他のブラウザーと同じに window.scrollY を加算すれば位置がずれません。
IE8もそうなのでは?

それで、
[code]
//HACK by domifara
Calendar.is_ie8 = ( Calendar.is_ie && /msie 8\.0/i.test(navigator.userAgent) );
Calendar.is_ie9 = ( Calendar.is_ie && /msie 9\.0/i.test(navigator.userAgent) );


//HACK by domifara
if (Calendar.is_ie8 || Calendar.is_ie9) {
br.y += window.scrollY;
br.x += window.scrollX;
}else if (Calendar.is_ie) {
br.y += document.body.scrollTop;
br.x += document.body.scrollLeft;
} else {
br.y += window.scrollY;
br.x += window.scrollX;
}

[/code]
と変更したもの zipにしました。
http://xodomifara.lolipop.jp/karidown/calendar_js.zip

私のテスト環境をあまり用意できないので、
試してみていただけないでしょうか?

Responder a #60013

RE: IE9での予定編集のときの「終了日による指定」のjscalendarの表示位置 (2011-11-01 20:34 by domifara #60304)


IE8での正常動作確認しました。

改定版位置では、window.scrollY を加算すれば正常動作するけど
訂正というのは、IE9.8のときwindow.scrollYが undifine値なのに正しい位置にカレンダーが表示される不思議な現象を
まあいいかみたいにしていたのですが
どうも
元の原因は Calendar.getAbsolutePos で取得される
boxの位置がIE9.8で旧バージョンと異なるのが、元の原因ではないかと思われます
offsetTopの扱いがスクロール値まで含んだものに変わったのかな?

calendar.jsの line 1396 ぐらいの
旧バージョンではscrollTopによる補正が必要だったのが
IE8,IE9では不要になったと思われます。

改定2版
[code]
//HACK by domifara
if (Calendar.is_ie8 || Calendar.is_ie9) {
//Correction is not needed
}else if (Calendar.is_ie) {
br.y += document.body.scrollTop;
br.x += document.body.scrollLeft;
var tmp = box.x + box.width - br.x;
if (tmp > 0) box.x -= tmp;
tmp = box.y + box.height - br.y;
if (tmp > 0) box.y -= tmp;
} else {
br.y += window.scrollY;
br.x += window.scrollX;
var tmp = box.x + box.width - br.x;
if (tmp > 0) box.x -= tmp;
tmp = box.y + box.height - br.y;
if (tmp > 0) box.y -= tmp;
}
[/code]
改定2版
http://xodomifara.lolipop.jp/karidown/calendar_js.zip

IE8,9では(firefoxも)では正常動作しました
後はIE7での動作検証が必要です。

Responder a #60013