一个漂亮的JS弹出日历,支持多种浏览器

js代码

 

  1. // JavaScript Document
  2.     var browser=navigator.appName;//浏览器名称
  3.     var language = 'en';    
  4.     var enablePast = 0;
  5.     var fixedX = -1;
  6.     var fixedY = -1;
  7.     var startAt = 1;
  8.     var showWeekNumber = 0; 
  9.     var showToday = 1;
  10.     var imgDir = 'images/'
  11.     var dayName = '日';
  12.     var gotoString = {
  13.         en : '当前月'
  14.     };
  15.     var todayString = {
  16.         en : '今天:'
  17.     };
  18.     var weekString = {
  19.         en : '星期'
  20.     };
  21.     var scrollLeftMessage = {
  22.         en : '上月'
  23.         
  24.     };
  25.     var scrollRightMessage = {
  26.         en : '下月'
  27.         
  28.     };
  29.     var selectMonthMessage = {
  30.         en : '选择月份.'
  31.     };
  32.     var selectYearMessage = {
  33.         en : '选择年份.'
  34.     };
  35.     var selectDateMessage = {
  36.         en : 'Go'
  37.     };
  38.     var monthName = {
  39.         en : new Array('1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月')
  40.         
  41.     };
  42.     var monthName2 = {
  43.         en : new Array('1','2','3','4','5','6','7','8','9','10','11','12')
  44.         
  45.     };
  46.     if (startAt==0) {
  47.         dayName = {
  48.             en : new Array('星期日','星期一','星期二','星期三','星期四','星期五','星期六')
  49.             
  50.         };
  51.     } else {
  52.         dayName = {
  53.             en : new Array('一','二','三','四','五','六','日')
  54.         };
  55.     }
  56.     var crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected, omonthSelected, oyearSelected, odateSelected, monthConstructed, yearConstructed, intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat, nStartingYear, selDayAction, isPast;
  57.     var visYear  = 0;
  58.     var visMonth = 0;
  59.     var bPageLoaded = false;
  60.     var ie  = document.all;
  61.     var dom = document.getElementById;
  62.     var ns4 = document.layers;
  63.     var today    = new Date();
  64.     var dateNow  = today.getDate();
  65.     var monthNow = today.getMonth();
  66.     //var yearNow  = today.getYear();
  67.     if(browser=="Microsoft Internet Explorer"){
  68.         var yearNow  = today.getYear();
  69.     }else{
  70.         var yearNow  = today.getYear()+1900;
  71.     }
  72.     var timeNow  =  today.getHours() + ":" + today.getMinutes() +":" + today.getSeconds();
  73.     var imgsrc   = new Array('pcaldrop1.gif','pcaldrop2.gif','pcalleft1.gif','pcalleft2.gif','pcalright1.gif','pcalright2.gif');
  74.     var img      = new Array();
  75.     var bShow    = false;
  76.     function hideElement( elmID, overDiv ) {
  77.         if(ie) {
  78.             for(i = 0; i < document.all.tags( elmID ).length; i++) {
  79.                 obj = document.all.tags( elmID )[i];
  80.                 if(!obj || !obj.offsetParent) continue;
  81.                 // Find the element's offsetTop and offsetLeft relative to the BODY tag.
  82.                 objLeft   = obj.offsetLeft;
  83.                 objTop    = obj.offsetTop;
  84.                 objParent = obj.offsetParent;
  85.                 while(objParent.tagName.toUpperCase() != 'BODY') {
  86.                     objLeft  += objParent.offsetLeft;
  87.                     objTop   += objParent.offsetTop;
  88.                     objParent = objParent.offsetParent;
  89.                 }
  90.                 objHeight = obj.offsetHeight;
  91.                 objWidth  = obj.offsetWidth;
  92.                 if((overDiv.offsetLeft + overDiv.offsetWidth) <= objLeft);
  93.                 else if((overDiv.offsetTop + overDiv.offsetHeight) <= objTop);
  94.                 /* CHANGE by Charlie Roche for nested TDs*/
  95.                 else if(overDiv.offsetTop >= (objTop + objHeight + obj.height));
  96.                 /* END CHANGE */
  97.                 else if(overDiv.offsetLeft >= (objLeft + objWidth));
  98.                 else {
  99.                     obj.style.visibility = 'hidden';
  100.                 }
  101.             }
  102.         }
  103.     }
  104.     function showElement(elmID) {
  105.         if(ie) {
  106.             for(i = 0; i < document.all.tags( elmID ).length; i++) {
  107.                 obj = document.all.tags(elmID)[i];
  108.                 if(!obj || !obj.offsetParent) continue;
  109.                 obj.style.visibility = '';
  110.             }
  111.         }
  112.     }
  113.     function HolidayRec (d, m, y, desc) {
  114.         this.d = d;
  115.         this.m = m;
  116.         this.y = y;
  117.         this.desc = desc;
  118.     }
  119.     var HolidaysCounter = 0;
  120.     var Holidays = new Array();
  121.     function addHoliday (d, m, y, desc) {
  122.         Holidays[HolidaysCounter++] = new HolidayRec (d, m, y, desc);
  123.     }
  124.     if (dom) {
  125.         for (i=0;i<imgsrc.length;i++) {
  126.             img[i] = new Image;
  127.             img[i].src = imgDir + imgsrc[i];
  128.         }
  129.         document.write ('<div οnclick="bShow=true" id="calendar" style="z-index:+999;position:absolute;visibility:hidden;"><table width="'+((showWeekNumber==1)?250:220)+'" style="font-family:ms shell dlg;font-size:12px;border: 1px solid #A0A0A0;" bgcolor="#ffffff"><tr bgcolor="#000066"><td><table width="'+((showWeekNumber==1)?248:218)+'"><tr><td style="padding:2px;font-family:ms shell dlg;font-size:12px;"><font color="#ffffff' + '' /*C9D3E9*/ +'"><b><span id="caption"></span></b></font></td><td align="right"><a href="javascript:hideCalendar()"><img src="'+imgDir+'pcalclose.gif" width="15" height="13" border="0" /></a></td></tr></table></td></tr><tr><td style="padding:5px" bgcolor="#ffffff"><span id="content"></span></td></tr>');
  130.         if (showToday == 1) {
  131.             document.write ('<tr bgcolor="#f0f0f0"><td style="padding:5px" align="center"><span id="lblToday"></span></td></tr>');
  132.         }
  133.             
  134.         document.write ('</table></div><div id="selectMonth" style="z-index:+999;position:absolute;visibility:hidden;"></div><div id="selectYear" style="z-index:+999;position:absolute;visibility:hidden;"></div>');
  135.     }
  136.     var styleAnchor = 'text-decoration:none;color:black;';
  137.     var styleLightBorder = 'border:1px solid #a0a0a0;';
  138.     function swapImage(srcImg, destImg) {
  139.         if (ie) document.getElementById(srcImg).setAttribute('src',imgDir + destImg);
  140.     }
  141.     function init() {
  142.         if (!ns4)
  143.         {
  144.             if (!ie) yearNow += 1900;
  145.             crossobj=(dom)?document.getElementById('calendar').style : ie? document.all.calendar : document.calendar;
  146.             hideCalendar();
  147.             crossMonthObj = (dom) ? document.getElementById('selectMonth').style : ie ? document.all.selectMonth : document.selectMonth;
  148.             crossYearObj = (dom) ? document.getElementById('selectYear').style : ie ? document.all.selectYear : document.selectYear;
  149.             monthConstructed = false;
  150.             yearConstructed = false;
  151.             if (showToday == 1) {
  152.                 document.getElementById('lblToday').innerHTML = '<font color="#000066">' + todayString[language] + ' <a οnmοusemοve="window.status=/''+gotoString[language]+'/'" οnmοuseοut="window.status=/'/'" title="'+gotoString[language]+'" style="'+styleAnchor+'" href="javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();">'+weekString[language]+dateNow+','+yearNow+'年'+monthName[language][monthNow].substring(0,3)+dayName[language][(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+', ' + dateNow + '</a></font>';
  153.             }
  154.             sHTML1 = '<span id="spanLeft" style="border:1px solid #36f;cursor:pointer"  οnclick="decMonth()"  οnmοusedοwn="clearTimeout(timeoutID1);timeoutID1=setTimeout(/'StartDecMonth()/',500)" οnmοuseup="clearTimeout(timeoutID1);clearInterval(intervalID1)"> <img id="changeLeft" src="'+imgDir+'pcalleft1.gif" width="10" height="11" border="0"> </span> ';
  155.             sHTML1 += '<span id="spanRight" style="border:1px solid #36f;cursor:pointer"  οnclick="incMonth()" οnmοusedοwn="clearTimeout(timeoutID1);timeoutID1=setTimeout(/'StartIncMonth()/',500)" οnmοuseup="clearTimeout(timeoutID1);clearInterval(intervalID1)"> <img id="changeRight" src="'+imgDir+'pcalright1.gif" width="10" height="11" border="0"> </span> ';
  156.             sHTML1 += '<span id="spanMonth" style="border:1px solid #36f;cursor:pointer"  οnclick="popUpMonth()"></span> ';
  157.             sHTML1 += '<span id="spanYear" style="border:1px solid #36f;cursor:pointer"  οnclick="popUpYear()"></span> ';
  158.             document.getElementById('caption').innerHTML = sHTML1;
  159.             bPageLoaded=true;
  160.         }
  161.     }
  162.     function hideCalendar() {
  163.         crossobj.visibility = 'hidden';
  164.         if (crossMonthObj != null) crossMonthObj.visibility = 'hidden';
  165.         if (crossYearObj  != null) crossYearObj.visibility = 'hidden';
  166.         showElement('SELECT');
  167.         showElement('APPLET');
  168.     }
  169.     function padZero(num) {
  170.         return (num < 10) ? '0' + num : num;
  171.     }
  172.     function constructDate(d,m,y, t) {
  173.         sTmp = dateFormat;
  174.         sTmp = sTmp.replace ('dd','<e>');
  175.         sTmp = sTmp.replace ('d','<d>');
  176.         sTmp = sTmp.replace ('<e>',padZero(d));
  177.         sTmp = sTmp.replace ('<d>',d);
  178.         sTmp = sTmp.replace ('mmmm','<p>');
  179.         sTmp = sTmp.replace ('mmm','<o>');
  180.         sTmp = sTmp.replace ('mm','<n>');
  181.         sTmp = sTmp.replace ('m','<m>');
  182.         sTmp = sTmp.replace ('<m>',m+1);
  183.         sTmp = sTmp.replace ('<n>',padZero(m+1));
  184.         sTmp = sTmp.replace ('<o>',monthName[language][m]);
  185.         sTmp = sTmp.replace ('<p>',monthName2[language][m]);
  186.         sTmp = sTmp.replace ('yyyy',y);
  187.         sTmp = sTmp.replace ('yy',padZero(y%100));
  188.         return sTmp.replace ('tt',t);
  189.         
  190.     }
  191.     function closeCalendar() {
  192.         var timed = new Date();
  193.         var tt = timed.getHours() + ":" + timed.getMinutes() + ":" +timed.getSeconds() + "";
  194.         //alert(typeof tt + "is type of dataeSelected");
  195.         //alert(tt  +"is the return value");
  196.         hideCalendar();
  197.         ctlToPlaceValue.value = constructDate(dateSelected,monthSelected,yearSelected, tt );
  198.     }
  199.     /*** Month Pulldown ***/
  200.     function StartDecMonth() {
  201.         intervalID1 = setInterval("decMonth()",80);
  202.     }
  203.     function StartIncMonth() {
  204.         intervalID1 = setInterval("incMonth()",80);
  205.     }
  206.     function incMonth () {
  207.         monthSelected++;
  208.         if (monthSelected > 11) {
  209.             monthSelected = 0;
  210.             yearSelected++;
  211.         }
  212.         constructCalendar();
  213.     }
  214.     function decMonth () {
  215.         monthSelected--;
  216.         if (monthSelected < 0) {
  217.             monthSelected = 11;
  218.             yearSelected--;
  219.         }
  220.         constructCalendar();
  221.     }
  222.     function constructMonth() {
  223.         popDownYear()
  224.         if (!monthConstructed) {
  225.             sHTML = "";
  226.             for (i=0; i<12; i++) {
  227.                 sName = monthName[language][i];
  228.                 if (i == monthSelected){
  229.                     sName = '<b>' + sName + '</b>';
  230.                 }
  231.                 sHTML += '<tr><td id="m' + i + '"  style="cursor:pointer" οnclick="monthConstructed=false;monthSelected=' + i + ';constructCalendar();popDownMonth();event.cancelBubble=true"><font color="#000066"> ' + sName + ' </font></td></tr>';
  232.             }
  233.             document.getElementById('selectMonth').innerHTML = '<table width="70" style="font-family:ms shell dlg;font-size:12px;border:1px solid #a0a0a0;" bgcolor="#f0f0f0" cellspacing="0" >' + sHTML + '</table>';
  234.             monthConstructed = true;
  235.         }
  236.     }
  237.     function popUpMonth() {
  238.         if (visMonth == 1) {
  239.             popDownMonth();
  240.             visMonth--;
  241.         } else {
  242.             constructMonth();
  243.             crossMonthObj.visibility = (dom||ie) ? 'visible' : 'show';
  244.             crossMonthObj.left = parseInt(crossobj.left) + 50;
  245.             crossMonthObj.top = parseInt(crossobj.top) + 26;
  246.             hideElement('SELECT', document.getElementById('selectMonth'));
  247.             hideElement('APPLET', document.getElementById('selectMonth'));
  248.             visMonth++;
  249.         }
  250.     }
  251.     function popDownMonth() {
  252.         crossMonthObj.visibility = 'hidden';
  253.         visMonth = 0;
  254.     }
  255.     /*** Year Pulldown ***/
  256.     function incYear() {
  257.         for (i=0; i<7; i++) {
  258.             newYear = (i + nStartingYear) + 1;
  259.             if (newYear == yearSelected)
  260.                 txtYear = '<span style="color:#006;font-weight:bold;"> ' + newYear + ' </span>';
  261.             else
  262.                 txtYear = '<span style="color:#006;"> ' + newYear + ' </span>';
  263.             document.getElementById('y'+i).innerHTML = txtYear;
  264.         }
  265.         nStartingYear++;
  266.         bShow=true;
  267.     }
  268.     function decYear() {
  269.         for (i=0; i<7; i++) {
  270.             newYear = (i + nStartingYear) - 1;
  271.             if (newYear == yearSelected)
  272.                 txtYear = '<span style="color:#006;font-weight:bold"> ' + newYear + ' </span>';
  273.             else
  274.                 txtYear = '<span style="color:#006;"> ' + newYear + ' </span>';
  275.             document.getElementById('y'+i).innerHTML = txtYear;
  276.         }
  277.         nStartingYear--;
  278.         bShow=true;
  279.     }
  280.     function selectYear(nYear) {
  281.         yearSelected = parseInt(nYear + nStartingYear);
  282.         yearConstructed = false;
  283.         constructCalendar();
  284.         popDownYear();
  285.     }
  286.     function constructYear() {
  287.         popDownMonth();
  288.         sHTML = '';
  289.         if (!yearConstructed) {
  290.             sHTML = '<tr><td align="center" style="cursor:pointer" οnmοusedοwn="clearInterval(intervalID1);intervalID1=setInterval(/'decYear()/',30)" οnmοuseup="clearInterval(intervalID1)"><font color="#000066">-</font></td></tr>';
  291.             j = 0;
  292.             nStartingYear = yearSelected - 3;
  293.             for ( i = (yearSelected-3); i <= (yearSelected+3); i++ ) {
  294.                 sName = i;
  295.                 if (i == yearSelected) sName = '<b>' + sName + '</b>';
  296.                 sHTML += '<tr><td id="y' + j + '"  style="cursor:pointer" οnclick="selectYear('+j+');event.cancelBubble=true"><font color="#000066"> ' + sName + ' </font></td></tr>';
  297.                 j++;
  298.             }
  299.             sHTML += '<tr><td align="center" style="cursor:pointer" οnmοusedοwn="clearInterval(intervalID2);intervalID2=setInterval(/'incYear()/',30)" οnmοuseup="clearInterval(intervalID2)"><font color="#000066">+</font></td></tr>';
  300.             document.getElementById('selectYear').innerHTML = '<table width="44" cellspacing="0" bgcolor="#f0f0f0" style="font-family:ms shell dlg;font-size:12px;border:1px solid #a0a0a0;" >' + sHTML + '</table>';
  301.             yearConstructed = true;
  302.         }
  303.     }
  304.     function popDownYear() {
  305.         clearInterval(intervalID1);
  306.         clearTimeout(timeoutID1);
  307.         clearInterval(intervalID2);
  308.         clearTimeout(timeoutID2);
  309.         crossYearObj.visibility= 'hidden';
  310.         visYear = 0;
  311.     }
  312.     function popUpYear() {
  313.         var leftOffset
  314.         if (visYear==1) {
  315.             popDownYear();
  316.             visYear--;
  317.         } else {
  318.             constructYear();
  319.             crossYearObj.visibility = (dom||ie) ? 'visible' : 'show';
  320.             leftOffset = parseInt(crossobj.left) + document.getElementById('spanYear').offsetLeft;
  321.             if (ie) leftOffset += 6;
  322.             crossYearObj.left = leftOffset;
  323.             crossYearObj.top = parseInt(crossobj.top) + 26;
  324.             visYear++;
  325.         }
  326.     }
  327.     /*** calendar ***/
  328.     function WeekNbr(n) {
  329.         // Algorithm used:
  330.         // From Klaus Tondering's Calendar document (The Authority/Guru)
  331.         // http://www.tondering.dk/claus/calendar.html
  332.         // a = (14-month) / 12
  333.         // y = year + 4800 - a
  334.         // m = month + 12a - 3
  335.         // J = day + (153m + 2) / 5 + 365y + y / 4 - y / 100 + y / 400 - 32045
  336.         // d4 = (J + 31741 - (J mod 7)) mod 146097 mod 36524 mod 1461
  337.         // L = d4 / 1460
  338.         // d1 = ((d4 - L) mod 365) + L
  339.         // WeekNumber = d1 / 7 + 1
  340.         year = n.getFullYear();
  341.         month = n.getMonth() + 1;
  342.         if (startAt == 0) {
  343.             day = n.getDate() + 1;
  344.         } else {
  345.             day = n.getDate();
  346.         }
  347.         a = Math.floor((14-month) / 12);
  348.         y = year + 4800 - a;
  349.         m = month + 12 * a - 3;
  350.         b = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
  351.         J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
  352.         d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
  353.         L = Math.floor(d4 / 1460);
  354.         d1 = ((d4 - L) % 365) + L;
  355.         week = Math.floor(d1/7) + 1;
  356.         return week;
  357.     }
  358.     function constructCalendar () {
  359.         var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31);
  360.         var dateMessage;
  361.         var startDate = new Date (yearSelected,monthSelected,1);
  362.         var endDate;
  363.         if (monthSelected==1) {
  364.             endDate = new Date (yearSelected,monthSelected+1,1);
  365.             endDate = new Date (endDate - (24*60*60*1000));
  366.             numDaysInMonth = endDate.getDate();
  367.         } else {
  368.             numDaysInMonth = aNumDays[monthSelected];
  369.         }
  370.         datePointer = 0;
  371.         dayPointer = startDate.getDay() - startAt;
  372.         
  373.         if (dayPointer<0) dayPointer = 6;
  374.         sHTML = '<table border="0" style="font-family:verdana;font-size:12px;"><tr>';
  375.         if (showWeekNumber == 1) {
  376.             sHTML += '<td width="27"><b>' + weekString[language] + '</b></td><td width="1" rowspan="7" bgcolor="#d0d0d0" style="padding:0px"><img src="'+imgDir+'divider.gif" width="1"></td>';
  377.         }
  378.         for (i = 0; i<7; i++) {
  379.             sHTML += '<td width="27" align="right"><b><font color="#000066">' + dayName[language][i] + '</font></b></td>';
  380.         }
  381.         sHTML += '</tr><tr>';
  382.         
  383.         if (showWeekNumber == 1) {
  384.             sHTML += '<td align="right">' + WeekNbr(startDate) + ' </td>';
  385.         }
  386.         for ( var i=1; i<=dayPointer;i++ ) {
  387.             sHTML += '<td> </td>';
  388.         }
  389.     
  390.         for ( datePointer=1; datePointer <= numDaysInMonth; datePointer++ ) {
  391.             dayPointer++;
  392.             sHTML += '<td align="right">';
  393.             sStyle=styleAnchor;
  394.             if ((datePointer == odateSelected) && (monthSelected == omonthSelected) && (yearSelected == oyearSelected))
  395.             { sStyle+=styleLightBorder }
  396.             sHint = '';
  397.             for (k = 0;k < HolidaysCounter; k++) {
  398.                 if ((parseInt(Holidays[k].d) == datePointer)&&(parseInt(Holidays[k].m) == (monthSelected+1))) {
  399.                     if ((parseInt(Holidays[k].y)==0)||((parseInt(Holidays[k].y)==yearSelected)&&(parseInt(Holidays[k].y)!=0))) {
  400.                         sStyle+= 'background-color:#fdd;';
  401.                         sHint += sHint=="" ? Holidays[k].desc : "/n"+Holidays[k].desc;
  402.                     }
  403.                 }
  404.             }
  405.             sHint = sHint.replace('//"/g''"');
  406.             dateMessage = 'οnmοusemοve="window.status=/''+selectDateMessage[language].replace('[date]',constructDate(datePointer,monthSelected,yearSelected, timeNow))+'/'" οnmοuseοut="window.status=/'/'" ';
  407.             
  408.             if (enablePast == 0 && ((yearSelected < yearNow) || (monthSelected < monthNow) && (yearSelected == yearNow) || (datePointer < dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow))) {
  409.                 //selDayAction = '';
  410.                 selDayAction = 'href="javascript:dateSelected=' + datePointer + ';closeCalendar();"';
  411.                 isPast = 1;
  412.             } else {
  413.                 selDayAction = 'href="javascript:dateSelected=' + datePointer + ';closeCalendar();"';
  414.                 isPast = 0;
  415.             }
  416.             if ((datePointer == dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow)) { / today
  417.                 sHTML += "<b><a "+dateMessage+" title=/"" + sHint + "/" style='"+sStyle+"' "+selDayAction+"><font color=#ff0000> " + datePointer + "</font> </a></b>";
  418.             } else if (dayPointer % 7 == (startAt * -1)+1) {                                    / SI ES DOMINGO
  419.                 if (isPast==1)
  420.                     sHTML += "<a "+dateMessage+" title=/"" + sHint + "/" style='"+sStyle+"' "+selDayAction+"> <font color=#909090>" + datePointer + "</font> </a>";
  421.                 else
  422.                     sHTML += "<a "+dateMessage+" title=/"" + sHint + "/" style='"+sStyle+"' "+selDayAction+"> <font color=#54A6E2>" + datePointer + "</font> </a>";
  423.             } else if ((dayPointer % 7 == (startAt * -1)+7 && startAt==1) || (dayPointer % 7 == startAt && startAt==0)) {   / SI ES SABADO
  424.                 if (isPast==1)
  425.                     sHTML += "<a "+dateMessage+" title=/"" + sHint + "/" style='"+sStyle+"' "+selDayAction+"> <font color=#909090>" + datePointer + "</font> </a>";
  426.                 else
  427.                     sHTML += "<a "+dateMessage+" title=/"" + sHint + "/" style='"+sStyle+"' "+selDayAction+"> <font color=#54A6E2>" + datePointer + "</font> </a>";
  428.             } else {                                                                            / CUALQUIER OTRO DIA
  429.                 if (isPast==1)
  430.                     sHTML += "<a "+dateMessage+" title=/"" + sHint + "/" style='"+sStyle+"' "+selDayAction+"> <font color=#909090>" + datePointer + "</font> </a>";
  431.                 else
  432.                     sHTML += "<a "+dateMessage+" title=/"" + sHint + "/" style='"+sStyle+"' "+selDayAction+"> <font color=#000066>" + datePointer + "</font> </a>";
  433.             }
  434.             sHTML += '';
  435.             if ((dayPointer+startAt) % 7 == startAt) {
  436.                 sHTML += '</tr><tr>';
  437.                 if ((showWeekNumber == 1) && (datePointer < numDaysInMonth)) {
  438.                     sHTML += '<td align="right">' + (WeekNbr(new Date(yearSelected,monthSelected,datePointer+1))) + ' </td>';
  439.                 }
  440.             }
  441.         }
  442.         document.getElementById('content').innerHTML   = sHTML
  443.         document.getElementById('spanMonth').innerHTML = ' ' + monthName[language][monthSelected] + ' <img id="changeMonth" src="'+imgDir+'pcaldrop1.gif" width="12" height="10" border="0">'
  444.         document.getElementById('spanYear').innerHTML  = ' ' + yearSelected    + ' <img id="changeYear" src="'+imgDir+'pcaldrop1.gif" width="12" height="10" border="0">';
  445.     }
  446.     function showCalendar(ctl, ctl2, format, lang, past, fx, fy) {
  447.         if (lang != null && lang != '') language = lang;
  448.         if (past != null) enablePast = past;
  449.         else enablePast = 0;
  450.         if (fx != null) fixedX = fx;
  451.         else fixedX = -1;
  452.         if (fy != null) fixedY = fy;
  453.         else fixedY = -1;
  454.         if (showToday == 1) {
  455.             document.getElementById('lblToday').innerHTML = '<font color="#000066">' + todayString[language] + ' <a οnmοusemοve="window.status=/''+gotoString[language]+'/'" οnmοuseοut="window.status=/'/'" title="'+gotoString[language]+'" style="'+styleAnchor+'" href="javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();">'+weekString[language]+dayName[language][(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+','+yearNow+'年'+ monthName[language][monthNow].substring(0,3)+dateNow+'日</a></font>';
  456.         }
  457.         popUpCalendar(ctl, ctl2, format);
  458.     }
  459.     function popUpCalendar(ctl, ctl2, format) {
  460.         var leftpos = 0;
  461.         var toppos  = 0;
  462.         if (bPageLoaded) {
  463.             if (crossobj.visibility == 'hidden') {
  464.                 ctlToPlaceValue = ctl2;
  465.                 dateFormat = format;
  466.                 formatChar = ' ';
  467.                 aFormat = dateFormat.split(formatChar);
  468.                 if (aFormat.length < 3) {
  469.                     formatChar = '/';
  470.                     aFormat = dateFormat.split(formatChar);
  471.                     if (aFormat.length < 3) {
  472.                         formatChar = '.';
  473.                         aFormat = dateFormat.split(formatChar);
  474.                         if (aFormat.length < 3) {
  475.                             formatChar = '-';
  476.                             aFormat = dateFormat.split(formatChar);
  477.                             if (aFormat.length < 3) {
  478.                                 formatChar = '';                    // invalid date format
  479.                             }
  480.                         }
  481.                     }
  482.                 }
  483.                 tokensChanged = 0;
  484.                 if (formatChar != "") {
  485.                     aData = ctl2.value.split(formatChar);           // use user's date
  486.                     for (i=0; i<3; i++) {
  487.                         if ((aFormat[i] == "d") || (aFormat[i] == "dd")) {
  488.                             dateSelected = parseInt(aData[i], 10);
  489.                             tokensChanged++;
  490.                         } else if ((aFormat[i] == "m") || (aFormat[i] == "mm")) {
  491.                             monthSelected = parseInt(aData[i], 10) - 1;
  492.                             tokensChanged++;
  493.                         } else if (aFormat[i] == "yyyy") {
  494.                             yearSelected = parseInt(aData[i], 10);
  495.                             tokensChanged++;
  496.                         } else if (aFormat[i] == "mmm") {
  497.                             for (j=0; j<12; j++) {
  498.                                 if (aData[i] == monthName[language][j]) {
  499.                                     monthSelected=j;
  500.                                     tokensChanged++;
  501.                                 }
  502.                             }
  503.                         } else if (aFormat[i] == "mmmm") {
  504.                             for (j=0; j<12; j++) {
  505.                                 if (aData[i] == monthName2[language][j]) {
  506.                                     monthSelected = j;
  507.                                     tokensChanged++;
  508.                                 }
  509.                             }
  510.                         }
  511.                     }
  512.                 }
  513.                 if ((tokensChanged != 3) || isNaN(dateSelected) || isNaN(monthSelected) || isNaN(yearSelected)) {
  514.                     dateSelected  = dateNow;
  515.                     monthSelected = monthNow;
  516.                     yearSelected  = yearNow;
  517.                 }
  518.                 odateSelected  = dateSelected;
  519.                 omonthSelected = monthSelected;
  520.                 oyearSelected  = yearSelected;
  521.                 aTag = ctl;
  522.                 do {
  523.                     aTag     = aTag.offsetParent;
  524.                     leftpos += aTag.offsetLeft;
  525.                     toppos  += aTag.offsetTop;
  526.                 } while (aTag.tagName != 'BODY');
  527.                 crossobj.left = (fixedX == -1) ? ctl.offsetLeft + leftpos : fixedX;
  528.                 crossobj.top = (fixedY == -1) ? ctl.offsetTop + toppos + ctl.offsetHeight + 2 : fixedY;
  529.                 constructCalendar (1, monthSelected, yearSelected);
  530.                 crossobj.visibility = (dom||ie) ? "visible" : "show";
  531.                 hideElement('SELECT', document.getElementById('calendar'));
  532.                 hideElement('APPLET', document.getElementById('calendar'));         
  533.                 bShow = true;
  534.             } else {
  535.                 hideCalendar();
  536.                 if (ctlNow!=ctl) popUpCalendar(ctl, ctl2, format);
  537.             }
  538.             ctlNow = ctl;
  539.         }
  540.     }
  541.     document.onkeypress = function hidecal1 () {
  542.         if (event.keyCode == 27) hideCalendar();
  543.     }
  544.     document.onclick = function hidecal2 () {
  545.         if (!bShow) hideCalendar();
  546.         bShow = false;
  547.     }
  548.     /*
  549.     if(ie) {
  550.         init();
  551.     } else {
  552.         window.onload = init;
  553.     }
  554.     */
  555.     if (document.all){
  556.  window.attachEvent('onload',init)
  557. }
  558. else{
  559.  window.addEventListener('load',init,false);
  560. }

 

调用

 

<input type="text" value="" id="Field2" name="Field2" size="16" readonly="readonly"   onFocus='showCalendar(this, document.getElementById("Field2"), "yyyy-mmmm-dd",null,0,-1,-1)'  />

<a href="javascript:;" οnclick='showCalendar(this, document.getElementById("Field2"), "yyyy-mmmm-dd",null,0,-1,-1)'>日历></a>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值