很好用的日历控件(calendar)

来源:互联网 发布:博思智慧平台c语言答案 编辑:程序博客网 时间:2024/04/30 04:25

今天帮朋友做个网站,发现了一个很好用的日期控件,如图:

calendar控件 

用法也相当简单,方法如下:

1.在网页中嵌入一个IFRAME和一段SCRIPT.

<IFRAME frameBorder=0 id=popFrame name=popFrame scrolling=no src="Calendar.htm" style="BORDER-BOTTOM: 2px ridge; BORDER-LEFT: 2px ridge; BORDER-RIGHT: 2px ridge; BORDER-TOP: 2px ridge; POSITION: absolute; VISIBILITY: hidden; Z-INDEX: 65535"></IFRAME>
<SCRIPT>document.onclick=function() {document.getElementById("popFrame").style.visibility="hidden";}</SCRIPT>

2.插入一个窗体,其中包含一个文本框和一个按钮,注意按钮的类型(button),在按钮中插入单击事件.

<form name="form1" method="post" action="">
  <input type="text" name="textfield" id="searchkey2"  disabled="false">
  <input type="button" name="Submit" value="选择日期" onClick="popFrame.fPopCalendar('searchkey2','searchkey2',event);">
</form>

3.OK,大功告成.

附控件代码如下,把代码存为Calendar.htm文件就可以了.

'以下为附件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE type=text/css>A:link {
 TEXT-DECORATION: none
}
A:visited {
 TEXT-DECORATION: none
}
TD {
 TEXT-ALIGN: center; VERTICAL-ALIGN: middle
}
.CalHead {
 COLOR: white; FONT: bold 8pt Arial
}
.CalCell {
 CURSOR: hand; FONT: 8pt Arial
}
.HeadBtn {
 FONT: 10pt Fixedsys; HEIGHT: 22px; VERTICAL-ALIGN: middle; WIDTH: 18px
}
.HeadBox {
 FONT-SIZE: 10pt; FONT-STYLE: normal; FONT-VARIANT: normal; FONT-WEIGHT: normal; LINE-HEIGHT: normal; VERTICAL-ALIGN: middle
}
.Today {
 COLOR: white; FONT: bold 10pt Arial
}
</STYLE>

<META content="MSHTML 5.00.3700.6699" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=0 marginwidth="0" marginheight="0">
<SCRIPT>
<!-- Begin Configurable Part
var giStartYear = 2001;
var giEndYear = 2010;
var giCellWidth = 16;
var gMonths = new Array("1","2","3","4","5","6","7","8","9","10","11","12");
var gcOtherDay = "gray";
var gcToggle = "yellow";
var gcBG = "#dddddd";
var gcTodayBG = "white";
var gcFrame = "teal";
var gcHead = "white";
var gcWeekend = "red";
var gcWorkday = "black";
var gcCalBG = "#6699cc";
//-- End Configurable Part -->

<!-- Begin Non-editable part

var gcTemp = gcBG;
var gdCurDate = new Date();
var giYear = gdCurDate.getFullYear();
var giMonth = gdCurDate.getMonth()+1;
var giDay = gdCurDate.getDate();
var tbMonSelect, tbYearSelect;
var gCellSet = new Array;
var gfPop = parent.document.getElementById(self.name);
var gdCtrl = new Object;

//****************************************************************************
// Here, you could modify the date format as you need !
//****************************************************************************
function fSetDate(iYear, iMonth, iDay){
  gdCtrl.value = iYear+"-"+gMonths[iMonth-1]+"-"+iDay; // <--Modify this
  gfPop.style.visibility = "hidden";
}

//****************************************************************************
// Param: popCtrl is the widget beyond which you want popup this calendar;
//        dateCtrl is the widget into which you want to put the selected date;
//****************************************************************************
function fPopCalendar(popCtrl, dateCtrl, anEvent){
  anEvent.cancelBubble=true;
  gdCtrl = parent.document.getElementById(dateCtrl);
  var pc = parent.document.getElementById(popCtrl);
  fSetYearMon(giYear, giMonth);
  var point = fGetXY(pc);
  with (gfPop.style) {
   left = point.x-1;
 top  = point.y+pc.offsetHeight+1;
 visibility = "visible";
  }
}

function Point(iX, iY){
 this.x = iX;
 this.y = iY;
}

function fGetXY(aTag){
  var pt = new Point(aTag.offsetLeft, aTag.offsetTop);
  do {
   aTag = aTag.offsetParent;
   pt.x += aTag.offsetLeft;
   pt.y += aTag.offsetTop;
  } while(aTag.tagName!="BODY");
  return pt;
}

function fSetSelected(aCell){
  var iOffset = 0;
  var iYear = parseInt(tbSelYear.value);
  var iMonth = parseInt(tbSelMonth.value);

  aCell.bgColor = gcBG;
  with (aCell.firstChild){
   var iDate = parseInt(innerHTML);
   if (style.color==gcOtherDay)
  iOffset = (id<10)?-1:1;
 iMonth += iOffset;
 if (iMonth<1) {
  iYear--;
  iMonth = 12;
 }else if (iMonth>12){
  iYear++;
  iMonth = 1;
 }
  }

  fSetDate(iYear, iMonth, iDate);
}

function fBuildCal(iYear, iMonth) {
  var aMonth=new Array();
  for(i=1;i<7;i++)
   aMonth[i]=new Array(i);

  var dCalDate=new Date(iYear, iMonth-1, 1);
  var iDayOfFirst=dCalDate.getDay();
  var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();
  var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1;
  var iDate = 1;
  var iNext = 1;

  for (d = 0; d < 7; d++)
 aMonth[1][d] = (d<iDayOfFirst)?-(iOffsetLast+d):iDate++;
  for (w = 2; w < 7; w++)
   for (d = 0; d < 7; d++)
  aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:-(iNext++);
  return aMonth;
}

function fDrawCal(iCellWidth) {
  var WeekDay = new Array("日","一","二","三","四","五","六");
  var styleTD = " width='"+iCellWidth+"' ";            //Coded by Liming Weng(Victor Won)  email:victorwon@netease.com

  with (document) {
 write("<tr>");
 for(i=0; i<7; i++)
  write("<td class='CalHead' "+styleTD+">" + WeekDay[i] + "</td>");
 write("</tr>");

   for (w = 1; w < 7; w++) {
  write("<tr>");
  for (d = 0; d < 7; d++) {
   write("<td class='CalCell' "+styleTD+" onMouseOver='gcTemp=this.bgColor;this.bgColor=gcToggle;this.bgColor=gcToggle' onMouseOut='this.bgColor=gcTemp;this.bgColor=gcTemp' onclick='fSetSelected(this)'>");
   write("<A href='#null' onfocus='this.blur();'>00</A></td>")
  }
  write("</tr>");
 }
  }
}

function fUpdateCal(iYear, iMonth) {
  myMonth = fBuildCal(iYear, iMonth);
  var i = 0;
  var iDate = 0;
  for (w = 0; w < 6; w++)
 for (d = 0; d < 7; d++)
  with (gCellSet[(7*w)+d]) {
   id = i++;
   if (myMonth[w+1][d]<0) {
    style.color = gcOtherDay;
    innerHTML = -myMonth[w+1][d];
    iDate = 0;
   }else{
    style.color = ((d==0)||(d==6))?gcWeekend:gcWorkday;
    innerHTML = myMonth[w+1][d];
    iDate++;
   }
   parentNode.bgColor = ((iYear==giYear)&&(iMonth==giMonth)&&(iDate==giDay))?gcTodayBG:gcBG;
   parentNode.bgColor = parentNode.bgColor;
  }
}

function fSetYearMon(iYear, iMon){
  tbSelMonth.options[iMon-1].selected = true;
  if (iYear>giEndYear) iYear=giEndYear;
  if (iYear<giStartYear) iYear=giStartYear;
  tbSelYear.options[iYear-giStartYear].selected = true;
  fUpdateCal(iYear, iMon);
}

function fPrevMonth(){
  var iMon = tbSelMonth.value;
  var iYear = tbSelYear.value;

  if (--iMon<1) {
   iMon = 12;
   iYear--;
  }

  fSetYearMon(iYear, iMon);
}

function fNextMonth(){
  var iMon = tbSelMonth.value;
  var iYear = tbSelYear.value;

  if (++iMon>12) {
   iMon = 1;
   iYear++;
  }

  fSetYearMon(iYear, iMon);
}

with (document) {
  write("<table id='popTable' bgcolor='"+gcCalBG+"' cellspacing='0' cellpadding='0' border='0'><TR>");
  write("<td align='center'><input type='button' value='<' class='HeadBtn' onClick='fPrevMonth()'>");
  write("&nbsp;<select id='tbMonSelect' class='HeadBox' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won'>");
  for (i=0; i<12; i++)
 write("<option value='"+(i+1)+"'>"+gMonths[i]+"</option>");
  write("</SELECT><SELECT id='tbYearSelect' class='HeadBox' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won'>");
  for(i=giStartYear;i<=giEndYear;i++)
 write("<OPTION value='"+i+"'>"+i+"</OPTION>");
  write("</SELECT>&nbsp;<input type='button' value='>' class='HeadBtn' onclick='fNextMonth()'>");
  write("</td></TR><TR><td align='center'>");
  write("<DIV style='background-color:"+gcFrame+";width:"+((giCellWidth+6)*7+2)+"px;'><table border='0' cellpadding='2' >");
  tbSelMonth = getElementById("tbMonSelect");
  tbSelYear = getElementById("tbYearSelect");
  fDrawCal(giCellWidth);
  gCellSet = getElementsByTagName("A");
  fSetYearMon(giYear, giMonth);
  write("</table></DIV></td></TR><TR><TD align='center'>");
  write("<A href='#null' class='Today' onclick='fSetDate(giYear,giMonth,giDay); this.blur();' onMouseOver='gcTemp=this.style.color;this.style.color=gcToggle' onMouseOut='this.style.color=gcTemp'>今天是:&nbsp;"+giYear+"年"+gMonths[giMonth-1]+"月"+giDay+"日</A>");
  write("</TD></TR></TD></TR><TR></TR></TABLE>");
 
  gfPop.width = getElementById("popTable").offsetWidth;
  gfPop.height = getElementById("popTable").offsetHeight;
}
// End -- Coded by Liming Weng, email: qinyuanlu@163.com -->
</SCRIPT>
</BODY></HTML>

原创粉丝点击