IE6,IE7下div被textarea挡住

yaotomo 2012-12-09 12:09:47
IE8,火狐下效果


IE6,IE7下效果


点击“反映日期”,通过jQuery的date_input插件创建日期选择框的div(里面包含了iframe),但是却被textarea给挡住了。。不知道该如何解决??
另外,正常应该在“反映日期”文本框右下角显示该DIV的,怎么跑到了那么大老远的地方(IE8和火狐也显示不正常)?求大神指点!

date_input插件代码太长了,我只发其中一部分

build: function () {
var monthNav = $('<p class="month_nav">' +
'<span class="button prev" title="[Page-Up]">«</span>' +
' <span class="month_name"></span> ' +
'<span class="button next" title="[Page-Down]">»</span>' +
'</p>');
this.monthNameSpan = $(".month_name", monthNav);
$(".prev", monthNav).click(this.bindToObj(function () { this.moveMonthBy(-1); }));
$(".next", monthNav).click(this.bindToObj(function () { this.moveMonthBy(1); }));

var yearNav = $('<p class="year_nav">' +
'<span class="button prev" title="[Ctrl+Page-Up]">«</span>' +
' <span class="year_name"></span> ' +
'<span class="button next" title="[Ctrl+Page-Down]">»</span>' +
'</p>');
this.yearNameSpan = $(".year_name", yearNav);
$(".prev", yearNav).click(this.bindToObj(function () { this.moveMonthBy(-12); }));
$(".next", yearNav).click(this.bindToObj(function () { this.moveMonthBy(12); }));

var nav = $('<div class="nav"></div>').append(monthNav, yearNav);

var tableShell = "<table><thead><tr>";
$(this.adjustDays(this.short_day_names)).each(function () {
tableShell += "<th>" + this + "</th>";
});
tableShell += "</tr></thead><tbody></tbody></table>";

this.dateSelector = this.rootLayers = $('<div class="date_selector"></div>').append(nav, tableShell).insertAfter(this.input);

if ($.browser.msie && $.browser.version < 7) {
this.ieframe = $('<iframe class="date_selector_ieframe" frameborder="0" src="#"></iframe>').insertBefore(this.dateSelector);
this.rootLayers = this.rootLayers.add(this.ieframe);

// IE 6 only does :hover on A elements
$(".button", nav).mouseover(function () { $(this).addClass("hover") });
$(".button", nav).mouseout(function () { $(this).removeClass("hover") });
};

this.tbody = $("tbody", this.dateSelector);

this.input.change(this.bindToObj(function () { this.selectDate(); }));
this.selectDate();
},
insideSelector: function (event) {
var offset = this.dateSelector.position();
offset.right = offset.left + this.dateSelector.outerWidth();
offset.bottom = offset.top + this.dateSelector.outerHeight();

return event.pageY < offset.bottom &&
event.pageY > offset.top &&
event.pageX < offset.right &&
event.pageX > offset.left;
},


CSS代码

/* Some resets for compatibility with existing CSS */
.date_selector, .date_selector * {
width: auto;
height: auto;
border: none;
background: none;
margin: 0;
padding: 0;
text-align: left;
text-decoration: none;
}
.date_selector {
background: #F2F2F2;
border: 1px solid #bbb;
padding: 5px;
margin: -1px 0 0 0;
position: absolute;
z-index: 100000;
display: none;
}
.date_selector_ieframe {
position: absolute;
z-index: 99999;
display: none;
}
.date_selector .nav {
width: 17.5em; /* 7 * 2.5em */
}
.date_selector .month_nav, .date_selector .year_nav {
margin: 0 0 3px 0;
padding: 0;
display: block;
position: relative;
text-align: center;
}
.date_selector .month_nav {
float: left;
width: 55%;
}
.date_selector .year_nav {
float: right;
width: 35%;
margin-right: -8px; /* Compensates for cell borders */
}
.date_selector .month_name, .date_selector .year_name {
font-weight: bold;
line-height: 20px;
}
.date_selector .button {
display: block;
position: absolute;
top: 0;
width: 18px;
height: 18px;
line-height: 17px;
font-weight: bold;
color: #003C78;
text-align: center;
font-size: 120%;
overflow: hidden;
border: 1px solid #F2F2F2;
}
.date_selector .button:hover, .date_selector .button.hover {
background: none;
color: #003C78;
cursor: pointer;
border-color: #ccc;
}
.date_selector .prev {
left: 0;
}
.date_selector .next {
right: 0;
}
.date_selector table {
border-spacing: 0;
border-collapse: collapse;
clear: both;
}
.date_selector th, .date_selector td {
width: 2.5em;
height: 2em;
padding: 0;
text-align: center;
color: black;
}
.date_selector td {
border: 1px solid #ccc;
line-height: 2em;
text-align: center;
white-space: nowrap;
color: #003C78;
background: white;
}
.date_selector td.today {
background: #FFFEB3;
}
.date_selector td.unselected_month {
color: #ccc;
}
.date_selector td.selectable_day {
cursor: pointer;
}
.date_selector td.selected {
background: #D8DFE5;
font-weight: bold;
}
.date_selector td.selectable_day:hover, .date_selector td.selectable_day.hover {
background: #003C78;
color: white;
}

...全文
194 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2012-12-11
  • 打赏
  • 举报
回复
用my97date吧, 这个是应用最广泛最好用的。 其它的都弱爆了。 my97date
scscms太阳光 2012-12-10
  • 打赏
  • 举报
回复
要解决其实很好办,在你的日历底放个iframe 在IE6下select,textarea比较高级,可用iframe来挡住。而div又可挡住iframe,但挡不住select之类的。
scscms太阳光 2012-12-10
  • 打赏
  • 举报
回复
有iframe你还挡不住textarea?那你肯定是CSS有问题了。
yaotomo 2012-12-10
  • 打赏
  • 举报
回复
引用 3 楼 xzy21com 的回复:
要解决其实很好办,在你的日历底放个iframe 在IE6下select,textarea比较高级,可用iframe来挡住。而div又可挡住iframe,但挡不住select之类的。
为了避免被select挡住,这个插件本身就带有iframe的。

this.ieframe = $('<iframe class="date_selector_ieframe" frameborder="0" src="#"></iframe>').insertBefore(this.dateSelector);
this.rootLayers = this.rootLayers.add(this.ieframe);
豪情 2012-12-09
  • 打赏
  • 举报
回复
这是定位问题,跟jq没有半毛钱关系, position: absolute; 是这样的,如果父级元素中没有position:relative的话会以body做为参考点,z-index位置也是,如果父级中有的话则以父级的为参考点。父级再去与其它元素pk z-index值。 所以说,这个情况如果父级中没有position;relative;那就加上一个,然后写z-index属性,从父级上提高。 一时半会说不清楚,有问题到:92588284 群中上传文件咨询。
网络科技 2012-12-09
  • 打赏
  • 举报
回复
你这个问题比较难办,代码量也不少,建议你打包下可测试的项目,上传上去,给有兴趣有时间的大虾测试下,改好下再传给你。这里你代码也贴不全,估计也很难看出那里问题了(jQuery我没学过,水平也有限,虽然有点时间,但没法帮你了)

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧