一般不会被列表框遮挡的日期控件都是用一个透明的iframe来做的,但在IE5下因为透明风格不被支持却无法正常使用。这个控件直接使用iframe作为日期选择界面,就解决了兼容性问题。不过只有简单的选择功能,如果大家给它添加了新的功能,记得告诉我一下IE5下通过、不会被列表框遮挡的日期控件。我有时间也给它添点功能,比如设定可选择时间段、快捷选择年份和月份等等。
控件代码:

IE5下通过、不会被列表框遮挡的日期控件Imports System.ComponentModel
IE5下通过、不会被列表框遮挡的日期控件
Imports System.Web.UI
IE5下通过、不会被列表框遮挡的日期控件


如果页面中有多个日期控件,就需要给它们设定不同的FormName和IDName了。
DateControl.js文件内容:

IE5下通过、不会被列表框遮挡的日期控件document.write("<iframe id=DateControlSelect src=\"/js/DateControl.htm\" style=\"position:absolute; visibility:hidden;width:175px; height:182px; z-index:10; \" scrolling=no  frameborder=0>")
IE5下通过、不会被列表框遮挡的日期控件
IE5下通过、不会被列表框遮挡的日期控件
var DateControlNowID = "";
IE5下通过、不会被列表框遮挡的日期控件
IE5下通过、不会被列表框遮挡的日期控件
function ShowDateControl()
IE5下通过、不会被列表框遮挡的日期控件{
IE5下通过、不会被列表框遮挡的日期控件    
if(event.srcElement.type == "button")
IE5下通过、不会被列表框遮挡的日期控件    {
IE5下通过、不会被列表框遮挡的日期控件        sTemp 
= event.srcElement.id.substr(0, event.srcElement.id.length - 6)
IE5下通过、不会被列表框遮挡的日期控件    }
IE5下通过、不会被列表框遮挡的日期控件    
else if(event.srcElement.type == "text")
IE5下通过、不会被列表框遮挡的日期控件    {
IE5下通过、不会被列表框遮挡的日期控件        sTemp 
= event.srcElement.id.substr(0, event.srcElement.id.length - 5)
IE5下通过、不会被列表框遮挡的日期控件    }
IE5下通过、不会被列表框遮挡的日期控件    
IE5下通过、不会被列表框遮挡的日期控件    document.all.DateControlSelect.style.left 
= event.x
IE5下通过、不会被列表框遮挡的日期控件    document.all.DateControlSelect.style.top 
= event.y
IE5下通过、不会被列表框遮挡的日期控件    
if(DateControlNowID == sTemp)
IE5下通过、不会被列表框遮挡的日期控件    {
IE5下通过、不会被列表框遮挡的日期控件        
if(document.all.DateControlSelect.style.visibility == "hidden")
IE5下通过、不会被列表框遮挡的日期控件        {
IE5下通过、不会被列表框遮挡的日期控件            document.all.DateControlSelect.style.visibility 
= "visible"
IE5下通过、不会被列表框遮挡的日期控件        }
IE5下通过、不会被列表框遮挡的日期控件        
else
IE5下通过、不会被列表框遮挡的日期控件        {
IE5下通过、不会被列表框遮挡的日期控件            document.all.DateControlSelect.style.visibility 
= "hidden"
IE5下通过、不会被列表框遮挡的日期控件        }
IE5下通过、不会被列表框遮挡的日期控件    }
IE5下通过、不会被列表框遮挡的日期控件    
else
IE5下通过、不会被列表框遮挡的日期控件    {
IE5下通过、不会被列表框遮挡的日期控件        document.all.DateControlSelect.style.visibility 
= "visible"
IE5下通过、不会被列表框遮挡的日期控件        DateControlNowID 
= sTemp
IE5下通过、不会被列表框遮挡的日期控件    }
IE5下通过、不会被列表框遮挡的日期控件}
IE5下通过、不会被列表框遮挡的日期控件
IE5下通过、不会被列表框遮挡的日期控件
function FillDateControl(iMonth)
IE5下通过、不会被列表框遮挡的日期控件{
IE5下通过、不会被列表框遮挡的日期控件    inputObject 
= eval("document.all." + DateControlNowID + "Input")
IE5下通过、不会被列表框遮挡的日期控件    
if(DateControlTableHead.rows[0].cells[1].innerText == "")
IE5下通过、不会被列表框遮挡的日期控件    {
IE5下通过、不会被列表框遮挡的日期控件        dt 
= new Date()
IE5下通过、不会被列表框遮挡的日期控件    }
IE5下通过、不会被列表框遮挡的日期控件    
else
IE5下通过、不会被列表框遮挡的日期控件    {
IE5下通过、不会被列表框遮挡的日期控件        stemp 
= DateControlTableHead.rows[0].cells[1].innerText
IE5下通过、不会被列表框遮挡的日期控件        dt 
= new Date(parseInt(stemp.substring(0, stemp.indexOf("-"))), parseInt(stemp.substring(stemp.indexOf("-"+ 1, stemp.length)) - 1 + iMonth, 1)
IE5下通过、不会被列表框遮挡的日期控件    }
IE5下通过、不会被列表框遮挡的日期控件    DateControlTableHead.rows[
0].cells[1].innerText = dt.getYear() + "-" + (dt.getMonth() + 1)
IE5下通过、不会被列表框遮挡的日期控件    dtStart 
= new Date(dt.getFullYear(), dt.getMonth(), 1)
IE5下通过、不会被列表框遮挡的日期控件    dtNext 
= new Date(dt.getFullYear(), dt.getMonth() + 11)
IE5下通过、不会被列表框遮挡的日期控件    iStartDay 
= dtStart.getDay()
IE5下通过、不会被列表框遮挡的日期控件    i 
= 0
IE5下通过、不会被列表框遮挡的日期控件    j 
= 1
IE5下通过、不会被列表框遮挡的日期控件    
for(; i < 7*6; i++)
IE5下通过、不会被列表框遮挡的日期控件    {
IE5下通过、不会被列表框遮挡的日期控件        
if((i % 7== 0 && i != 0)
IE5下通过、不会被列表框遮挡的日期控件        {
IE5下通过、不会被列表框遮挡的日期控件            j
++
IE5下通过、不会被列表框遮挡的日期控件        }
IE5下通过、不会被列表框遮挡的日期控件        DateControlTableContent.rows[j].cells[i 
% 7].innerText = ""
IE5下通过、不会被列表框遮挡的日期控件        DateControlTableContent.rows[j].cells[i 
% 7].bgColor = "white"
IE5下通过、不会被列表框遮挡的日期控件    }
IE5下通过、不会被列表框遮挡的日期控件    i 
= 0
IE5下通过、不会被列表框遮挡的日期控件    iDay 
= 1
IE5下通过、不会被列表框遮挡的日期控件    j 
= 1
IE5下通过、不会被列表框遮挡的日期控件    iDayCount 
= (dtNext - dtStart) / 24 / 60 / 60 / 1000
IE5下通过、不会被列表框遮挡的日期控件    dtNow 
= new Date()
IE5下通过、不会被列表框遮挡的日期控件    
for(; i<iDayCount; i++)
IE5下通过、不会被列表框遮挡的日期控件    {
IE5下通过、不会被列表框遮挡的日期控件        iDay 
= i + iStartDay + 6
IE5下通过、不会被列表框遮挡的日期控件        
if((iDay % 7== 0 && iDay != 1)
IE5下通过、不会被列表框遮挡的日期控件        {
IE5下通过、不会被列表框遮挡的日期控件           
if(i != 0 || iStartDay != 1)
IE5下通过、不会被列表框遮挡的日期控件           {
IE5下通过、不会被列表框遮挡的日期控件               j
++
IE5下通过、不会被列表框遮挡的日期控件           }
IE5下通过、不会被列表框遮挡的日期控件        }
IE5下通过、不会被列表框遮挡的日期控件        stemp 
= dt.getFullYear() + "-" + (dt.getMonth()+1).toString() + "-" + (i + 1).toString()
IE5下通过、不会被列表框遮挡的日期控件        DateControlTableContent.rows[j].cells[iDay 
% 7].innerHTML = "<a href='javascript:top.ChangeDayDateControl(\"" + stemp + "\");' >"  + (i + 1).toString() + "</a>"
IE5下通过、不会被列表框遮挡的日期控件        
if(inputObject)
IE5下通过、不会被列表框遮挡的日期控件        {
IE5下通过、不会被列表框遮挡的日期控件            
if(stemp == inputObject.value || (inputObject.value == "" && (i + 1== dtNow.getDate() && dtNow.getMonth() == dt.getMonth() && dtNow.getFullYear() == dt.getFullYear()))
IE5下通过、不会被列表框遮挡的日期控件            {
IE5下通过、不会被列表框遮挡的日期控件                DateControlTableContent.rows[j].cells[iDay 
% 7].bgColor = "red"
IE5下通过、不会被列表框遮挡的日期控件            }
IE5下通过、不会被列表框遮挡的日期控件        }
IE5下通过、不会被列表框遮挡的日期控件        
else
IE5下通过、不会被列表框遮挡的日期控件        {
IE5下通过、不会被列表框遮挡的日期控件            
if(((i + 1== dtNow.getDate() && dtNow.getMonth() == dt.getMonth() && dtNow.getFullYear() == dt.getFullYear()))
IE5下通过、不会被列表框遮挡的日期控件            {
IE5下通过、不会被列表框遮挡的日期控件                DateControlTableContent.rows[j].cells[iDay 
% 7].bgColor = "red"
IE5下通过、不会被列表框遮挡的日期控件            }
IE5下通过、不会被列表框遮挡的日期控件        }
IE5下通过、不会被列表框遮挡的日期控件    }
IE5下通过、不会被列表框遮挡的日期控件}
IE5下通过、不会被列表框遮挡的日期控件
function ChangeDayDateControl(sTemp)
IE5下通过、不会被列表框遮挡的日期控件{
IE5下通过、不会被列表框遮挡的日期控件    eval(
"document.all." + DateControlNowID + "Input.value = sTemp")
IE5下通过、不会被列表框遮挡的日期控件    FillDateControl(
0)
IE5下通过、不会被列表框遮挡的日期控件    document.all.DateControlSelect.style.visibility 
= "hidden"
IE5下通过、不会被列表框遮挡的日期控件}
IE5下通过、不会被列表框遮挡的日期控件


DateControl.htm文件内容:

IE5下通过、不会被列表框遮挡的日期控件<body leftmargin=0 topmargin=0>
IE5下通过、不会被列表框遮挡的日期控件
<table id=DateControlTableHead width=200 style="color: #FFFFFF;background-color: #cc0033;height: 15px;width: 175px;border-top-width: 1px;border-right-width: 0px;border-bottom-width: 1px;border-left-width: 0px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-style: solid;">
IE5下通过、不会被列表框遮挡的日期控件
<tr>
IE5下通过、不会被列表框遮挡的日期控件    
<td><href="javascript:parent.FillDateControl(-1);">上一月</a></td>
IE5下通过、不会被列表框遮挡的日期控件    
<td colspan=5 align=center></td>
IE5下通过、不会被列表框遮挡的日期控件    
<td align=right><a href="javascript:parent.FillDateControl(1);">下一月</a></td>
IE5下通过、不会被列表框遮挡的日期控件
</tr>
IE5下通过、不会被列表框遮挡的日期控件
</table>
IE5下通过、不会被列表框遮挡的日期控件
<table id=DateControlTableContent style="background-color: #c2c2c2;height: 90px;width: 175px;">
IE5下通过、不会被列表框遮挡的日期控件
<tr bgcolor="#FFCC66">
IE5下通过、不会被列表框遮挡的日期控件    
<td></td>
IE5下通过、不会被列表框遮挡的日期控件    
<td></td>
IE5下通过、不会被列表框遮挡的日期控件    
<td></td>
IE5下通过、不会被列表框遮挡的日期控件    
<td></td>
IE5下通过、不会被列表框遮挡的日期控件    
<td></td>
IE5下通过、不会被列表框遮挡的日期控件    
<td><font color=red>六</font></td>
IE5下通过、不会被列表框遮挡的日期控件    
<td><font color=red>日</font></td>
IE5下通过、不会被列表框遮挡的日期控件
</tr>
IE5下通过、不会被列表框遮挡的日期控件
<tr><td bgcolor="#c2c2c2"></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
IE5下通过、不会被列表框遮挡的日期控件
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
IE5下通过、不会被列表框遮挡的日期控件
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
IE5下通过、不会被列表框遮挡的日期控件
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
IE5下通过、不会被列表框遮挡的日期控件
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
IE5下通过、不会被列表框遮挡的日期控件
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
IE5下通过、不会被列表框遮挡的日期控件
</table>
IE5下通过、不会被列表框遮挡的日期控件
</body>
>


js,htm文件都要放在站点根目录下的js目录中。
控件界面还有些粗糙。
另外还有个Bug:定位上如果滚动条没在开始位置,日期控件就不能显示在预定位置了。如果有朋友能帮忙改进的话,非常感谢。IE5下通过、不会被列表框遮挡的日期控件

相关文章:

  • 2022-01-05
  • 2021-06-18
  • 2021-05-05
  • 2021-04-17
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
  • 2022-12-23
猜你喜欢
  • 2022-02-16
  • 2021-05-23
  • 2021-10-22
  • 2022-12-23
  • 2021-11-21
  • 2021-07-28
  • 2022-12-23
相关资源
相似解决方案