//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ //★ ★ //★ 日期控件 Version 1.0 ★ //★ ★ //★ Code by Chris.J(黄嘉隆) ★ //★ ★ //★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
function PopupCalendar(InstanceName) { ///Global Tag this.instanceName=InstanceName; ///Properties this.separator="-" this.oBtnTodayTitle="今天" this.oBtnCancelTitle="取消" //oCalendarChs.oBtnTodayTitle="今天"; //oCalendarChs.oBtnCancelTitle="取消"; //this.weekDaySting=new Array("S","M","T","W","T","F","S"); this.weekDaySting=new Array("日","一","二","三","四","五","六"); //this.monthSting=new Array("January","February","March","April","May","June","July","August","September","October","November","December"); this.monthSting=new Array("一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"); this.Width=200; this.currDate=new Date(); this.today=new Date(); this.startYear=1970; this.endYear=2010; ///Css this.normalfontColor="#666666"; this.selectedfontColor="red"; this.divBorderCss="1px solid #BCD0DE"; this.titleTableBgColor="#98B8CD"; this.tableBorderColor="#CCCCCC" ///Method this.Init=CalendarInit; this.Fill=CalendarFill; this.Refresh=CalendarRefresh; this.Restore=CalendarRestore; ///HTMLObject this.oTaget=null; this.oPreviousCell=null; this.sDIVID=InstanceName+"_Div"; this.sTABLEID=InstanceName+"_Table"; this.sMONTHID=InstanceName+"_Month"; this.sYEARID=InstanceName+"_Year"; this.sTODAYBTNID=InstanceName+"_TODAYBTN"; } function CalendarInit() ///Create panel { var sMonth,sYear sMonth=this.currDate.getMonth(); sYear=this.currDate.getYear(); htmlAll="
";
htmlAll+="
"; /// Month htmloMonth=""; for(i=0;i<12;i++) { htmloMonth+=""+this.monthSting[i]+" "; } htmloMonth+=" "; /// Year htmloYear=""; for(i=this.startYear;i<=this.endYear;i++) { htmloYear+=""+i+" "; } htmloYear+="
";
/// Day
htmloDayTable="
"; htmloDayTable+=""; for(i=0;i<=6;i++) { if(i==0) htmloDayTable+=""; else htmloDayTable+=" "; for(j=0;j<7;j++) {
if(i==0) { htmloDayTable+="
"; htmloDayTable+=this.weekDaySting[j]+" " } else { htmloDayTable+=" htmloDayTable+=" οnmοuseοver=CalendarCellsMsOver("+this.instanceName+")"; htmloDayTable+=" οnmοuseοut=CalendarCellsMsOut("+this.instanceName+")"; htmloDayTable+=" οnclick=CalendarCellsClick(this,"+this.instanceName+")>"; htmloDayTable+=" " } } htmloDayTable+=" "; } htmloDayTable+="
";
/// Today Button
htmloButton="
" htmloButton+=" htmloButton+=" οnclick=CalendarTodayClick("+this.instanceName+")>"+this.oBtnTodayTitle+" " htmloButton+=" htmloButton+=" οnclick=CalendarCancel("+this.instanceName+")>"+this.oBtnCancelTitle+" " htmloButton+="
"
/// All
htmlAll=htmlAll+htmloMonth+htmloYear+htmloDayTable+htmloButton+"
";
document.write(htmlAll);
this.Fill();
}
function CalendarFill() ///
{
var sMonth,sYear,sWeekDay,sToday,oTable,currRow,MaxDay,iDaySn,sIndex,rowIndex,cellIndex,oSelectMonth,oSelectYear
sMonth=this.currDate.getMonth();
sYear=this.currDate.getYear();
sWeekDay=(new Date(sYear,sMonth,1)).getDay();
sToday=this.currDate.getDate();
iDaySn=1
oTable=document.all[this.sTABLEID];
currRow=oTable.rows[1];
MaxDay=CalendarGetMaxDay(sYear,sMonth);
oSelectMonth=document.all[this.sMONTHID]
oSelectMonth.selectedIndex=sMonth;
oSelectYear=document.all[this.sYEARID]
for(i=0;i
{ if(parseInt(oSelectYear.options[i].value)==sYear)oSelectYear.selectedIndex=i; } for(rowIndex=1;rowIndex<=6;rowIndex++) { if(iDaySn>MaxDay)break; currRow = oTable.rows[rowIndex]; cellIndex = 0; if(rowIndex==1)cellIndex = sWeekDay; for(;cellIndex { if(iDaySn==sToday) { currRow.cells[cellIndex].innerHTML=""+iDaySn+" "; this.oPreviousCell=currRow.cells[cellIndex]; } else { currRow.cells[cellIndex].innerHTML=iDaySn; currRow.cells[cellIndex].style.color=this.normalfontColor; } CalendarCellSetCss(0,currRow.cells[cellIndex]); iDaySn++; if(iDaySn>MaxDay)break; } } } function CalendarRestore() /// Clear Data { var i,j,oTable oTable=document.all[this.sTABLEID] for(i=1;i { for(j=0;j { CalendarCellSetCss(0,oTable.rows[i].cells[j]); oTable.rows[i].cells[j].innerHTML=" "; } } } function CalendarRefresh(newDate) /// { this.currDate=newDate; this.Restore(); this.Fill(); } function CalendarCellsMsOver(oInstance) /// Cell MouseOver { var myCell = event.srcElement; CalendarCellSetCss(0,oInstance.oPreviousCell); if(myCell) { CalendarCellSetCss(1,myCell); oInstance.oPreviousCell=myCell; } } function CalendarCellsMsOut(oInstance) // Cell MouseOut { var myCell = event.srcElement; CalendarCellSetCss(0,myCell); } function CalendarYearChange(oInstance) /// Year Change { var sDay,sMonth,sYear,newDate sDay=oInstance.currDate.getDate(); sMonth=oInstance.currDate.getMonth(); sYear=document.all[oInstance.sYEARID].value newDate=new Date(sYear,sMonth,sDay); oInstance.Refresh(newDate); } function CalendarMonthChange(oInstance) /// Month Change { var sDay,sMonth,sYear,newDate sDay=oInstance.currDate.getDate(); sMonth=document.all[oInstance.sMONTHID].value sYear=oInstance.currDate.getYear(); newDate=new Date(sYear,sMonth,sDay); oInstance.Refresh(newDate); } function CalendarCellsClick(oCell,oInstance) { var sDay,sMonth,sYear,newDate sYear=oInstance.currDate.getFullYear(); sMonth=oInstance.currDate.getMonth(); sDay=oInstance.currDate.getDate(); if(oCell.innerText!=" ") { sDay=parseInt(oCell.innerText); if(sDay!=oInstance.currDate.getDate()) { newDate=new Date(sYear,sMonth,sDay); oInstance.Refresh(newDate); } } sDateString=sYear+oInstance.separator+CalendarDblNum(sMonth+1)+oInstance.separator+CalendarDblNum(sDay); ///return sDateString if(oInstance.oTaget.tagName.toLowerCase()=="input")oInstance.oTaget.value = sDateString; CalendarCancel(oInstance); return sDateString; } function CalendarTodayClick(oInstance) /// "Today" button Change { oInstance.Refresh(new Date()); } function getDateString(oInputSrc,oInstance) { if(oInputSrc&&oInstance) { var CalendarDiv=document.all[oInstance.sDIVID]; oInstance.oTaget=oInputSrc; CalendarDiv.style.pixelLeft=CalendargetPos(oInputSrc,"Left"); CalendarDiv.style.pixelTop=CalendargetPos(oInputSrc,"Top") + oInputSrc.offsetHeight; CalendarDiv.style.display=(CalendarDiv.style.display=="none")?"":"none"; } } function CalendarCellSetCss(sMode,oCell) /// Set Cell Css { // sMode // 0: OnMouserOut 1: OnMouseOver if(sMode) { oCell.style.border="1px solid #5589AA"; oCell.style.backgroundColor="#BCD0DE"; } else { oCell.style.border="1px solid #FFFFFF"; oCell.style.backgroundColor="#FFFFFF"; } } function CalendarGetMaxDay(nowYear,nowMonth) /// Get MaxDay of current month { var nextMonth,nextYear,currDate,nextDate,theMaxDay nextMonth=nowMonth+1; if(nextMonth>11) { nextYear=nowYear+1; nextMonth=0; } else { nextYear=nowYear; } currDate=new Date(nowYear,nowMonth,1); nextDate=new Date(nextYear,nextMonth,1); theMaxDay=(nextDate-currDate)/(24*60*60*1000); return theMaxDay; } function CalendargetPos(el,ePro) /// Get Absolute Position { var ePos=0; while(el!=null) { ePos+=el["offset"+ePro]; el=el.offsetParent; } return ePos; } function CalendarDblNum(num) { if(num < 10) return "0"+num; else return num; } function CalendarCancel(oInstance) ///Cancel { var CalendarDiv=document.all[oInstance.sDIVID]; CalendarDiv.style.display="none"; }
/********************************/
<
html
>
<
script
language
=javascript
src
="date.js"
>
script
>
<
script
>
var
oCalendarChs
=
new
PopupCalendar(
"
oCalendarChs
"
);
//
初始化控件时,请给出实例名称:oCalendarChs
oCalendarChs.weekDaySting
=
new
Array(
"
日
"
,
"
一
"
,
"
二
"
,
"
三
"
,
"
四
"
,
"
五
"
,
"
六
"
); oCalendarChs.monthSting
=
new
Array(
"
一月
"
,
"
二月
"
,
"
三月
"
,
"
四月
"
,
"
五月
"
,
"
六月
"
,
"
七月
"
,
"
八月
"
,
"
九月
"
,
"
十月
"
,
"
十一月
"
,
"
十二月
"
); oCalendarChs.oBtnTodayTitle
=
"
今天
"
; oCalendarChs.oBtnCancelTitle
=
"
取消
"
; oCalendarChs.Init();
script
>
<
table
>
<
tr
>
<
td
>
<
input
readonly type
="text"
name
="birthday"
onclick
="getDateString(this,oCalendarChs)"
value
="1987-11-22"
size
="15"
>
td
>
tr
>
table
>
html
>