下拉日期控件

 

var  gdCtrl  =   new  Object();
var  goSelectTag  =   new  Array();
var  gcGray  =   " #808080 " ;
var  gcToggle  =   " #ffff00 " ;
var  gcBG  =   " #cccccc " ;

var  gdCurDate  =   new  Date();
var  giYear  =  gdCurDate.getFullYear();
var  giMonth  =  gdCurDate.getMonth() + 1 ;
var  giDay  =  gdCurDate.getDate();

function  fPopCalendar(popCtrl, dateCtrl) {
  event.cancelBubble
=true;
  gdCtrl 
= dateCtrl;
  fSetYearMon(giYear, giMonth);
  
var point = fGetXY(popCtrl);
  
with (VicPopCal.style) {
      left 
= point.x;
    top  
= point.y+popCtrl.offsetHeight+1;
    width 
= VicPopCal.offsetWidth;
    height 
= VicPopCal.offsetHeight;
    fToggleTags(point);
    visibility 
= 'visible';
  }

  VicPopCal.focus();
}



function  fSetDate(iYear, iMonth, iDay) {
  
var iMonthNew = new String(iMonth);
  
var iDayNew = new String(iDay);
  
  
if(iMonthNew.length < 2 ) iMonthNew = "0" + iMonthNew;
  
if(iDayNew.length < 2 ) iDayNew = "0" + iDayNew;
  
  gdCtrl.value 
= iYear+"-"+iMonthNew+"-"+iDayNew;
  fHideCalendar();
}


//

function  fHideCalendar() {
  VicPopCal.style.visibility 
= "hidden";
  
for (i in goSelectTag)
      goSelectTag[i].style.visibility 
= "visible";
       goSelectTag.length 
= 0;
  
/*下面的代码调用页面的函数显示控件*/
    
try
    
{
        setVisible(
true);//设置控件显示的函数。
    }

    
catch(e)
    
{
        
return;
    }

}


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

  aCell.bgColor 
= gcBG;
  
with (aCell.children["cellText"]){
      
var iDay = parseInt(innerText);
      
if (color==gcGray)
        iOffset 
= (Victor<10)?-1:1;
    iMonth 
+= iOffset;
    
if (iMonth<1{
        iYear
--;
        iMonth 
= 12;
    }
else if (iMonth>12){
        iYear
++;
        iMonth 
= 1;
    }

  }

  fSetDate(iYear, iMonth, iDay);
}


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


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-11);
  
var iDayOfFirst=dCalDate.getDay();
  
var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();
  
var iOffsetLast=new Date(iYear, iMonth-10).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(iYear, iMonth, iCellHeight, iDateTextSize)  {
  
var WeekDay = new Array("","","","","","","");
  
var styleTD = " bgcolor='"+gcBG+"' bordercolor='"+gcBG+"' valign='middle' align='center' height='"+iCellHeight+"' style='font:bold "+iDateTextSize+" 宋体;";

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

      
for (w = 1; w < 7; w++{
        write(
"<tr>");
        
for (d = 0; d < 7; d++{
            
if(w==6 && d==5)
            
{
                write(
"<td colspan='2' id=calCell "+styleTD+"cursor:hand;' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG' οnclick='SetContorlEmpty()'");
                write(
"<a href='#'>清除</a>");
                write(
"</td>");
                
break;
            }

            write(
"<td id=calCell "+styleTD+"cursor:hand;' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG' οnclick='fSetSelected(this)'>");
            write(
"<font id=cellText Victor='Liming Weng'> </font>");
            write(
"</td>")
        }

        write(
"</tr>");
    }

  }

}


function  fUpdateCal(iYear, iMonth)  {
  myMonth 
= fBuildCal(iYear, iMonth);
  
var i = 0;
  
for (w = 0; w < 6; w++)
  
{
        
for (d = 0; d < 7; d++)
        
{
            
if((7*w)+!= 40)//最后一个单元格
            {
                
with (cellText[(7*w)+d])  
                
{
                    Victor 
= i++;
                    
if (myMonth[w+1][d]<0
                    
{
                        color 
= gcGray;
                        innerText 
= -myMonth[w+1][d];
                    }

                    
else
                    
{
                        color 
= ((d==0)||(d==6))?"red":"black";
                        innerText 
= myMonth[w+1][d];
                    }

                }

            }

            
else
            
{
                
break;
            }

        }

    }

}


function  fSetYearMon(iYear, iMon) {
  tbSelMonth.options[iMon
-1].selected = true;
  
for (i = 0; i < tbSelYear.length; i++)
    
if (tbSelYear.options[i].value == iYear)
        tbSelYear.options[i].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);
}


function  fToggleTags() {
  
with (document.all.tags("SELECT")){
     
for (i=0; i<length; i++)
         
if ((item(i).Victor!="Won")&&fTagInBound(item(i))){
             item(i).style.visibility 
= "hidden";
             goSelectTag[goSelectTag.length] 
= item(i);
         }

  }

}


function  fTagInBound(aTag) {
  
with (VicPopCal.style){
      
var l = parseInt(left);
      
var t = parseInt(top);
      
var r = l+parseInt(width);
      
var b = t+parseInt(height);
    
var ptLT = fGetXY(aTag);
    
return !((ptLT.x>r)||(ptLT.x+aTag.offsetWidth<l)||(ptLT.y>b)||(ptLT.y+aTag.offsetHeight<t));
  }

}


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


var  gMonths  =   new  Array( " &nbsp;一月 " , " &nbsp;二月 " , " &nbsp;三月 " , " &nbsp;四月 " , " &nbsp;五月 " , " &nbsp;六月 " , " &nbsp;七月 " , " &nbsp;八月 " , " &nbsp;九月 " , " &nbsp;十月 " , " 十一月 " , " 十二月 " );

with  (document)  {
    write(
"<Div id='VicPopCal' οnclick='event.cancelBubble=true' style='POSITION:absolute;visibility:hidden;border:2px ridge;width:10;z-index:100;'>");
    write(
"<table border='0' bgcolor='#6699cc'>");
    write(
"<TR>");
    write(
"<td valign='middle' align='center'><input type='button' name='PrevMonth' value='<' style='height:20;width:20;FONT:bold' onClick='fPrevMonth()'>");
    write(
"&nbsp;<SELECT name='tbSelYear' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won'>");
    
for(i=1990;i<2020;i++)
        write(
"<OPTION value='"+i+"'>"+i+"年</OPTION>");
    write(
"</SELECT>");
    write(
"&nbsp;<select name='tbSelMonth' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won'>");
    
for (i=0; i<12; i++)
        write(
"<option value='"+(i+1)+"'>"+gMonths[i]+"</option>");
    write(
"</SELECT>");
    write(
"&nbsp;<input type='button' name='PrevMonth' value='>' style='height:20;width:20;FONT:bold' οnclick='fNextMonth()'>");
    write(
"</td>");
    write(
"</TR><TR>");
    write(
"<td align='center'>");
    write(
"<DIV style='background-color:teal'><table width='100%' border='0' cellpadding='2'>");
    fDrawCal(giYear, giMonth, 
1212);
    write(
"</table></DIV>");
    write(
"</td>");
    write(
"</TR><TR>");
    write(
"</TR>");
    write(
"</TABLE></Div>");
    write(
"<SC"+"RIPT event=onclick() for=document>fHideCalendar()</S"+"CRIPT>");      
}

 
function  SelectDate(TxtEndDate)
{
        fPopCalendar(TxtEndDate,TxtEndDate);
  
/*下面的代码调用页面的函数隐藏控件*/
    
try
    
{
        setVisible(
false);//设置控件显示的函数。
    }

    
catch(e)
    
{
        
return false;
    }

    
return false;
}


function  ClearDate(TxtEndDate)
{
    document.forms[
0].TxtEndDate.value=""
    
return false;
}


// 点击清楚时将控件清空
function  SetContorlEmpty()
{
    gdCtrl.value 
= "";
    fHideCalendar();
}

 

在引用页面引用JS文件,在文本框的onfocus事件中调用SelectDate(this)方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值