JS写的日历控件

不知道哪天在网上找到了这个控件,感觉还不错,最近正好用到

<script type="text/javascript" language="javascript">
    var gMonths=new Array("一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月");
    var WeekDay=new Array("日","一","二","三","四","五","六");
    var strToday="今天";
    var strYear="年";
    var strMonth="月";
    var strDay="日";
    var splitChar="-";
    var startYear=2000;
    var endYear=2050;
    var dayTdHeight=12;
    var dayTdTextSize=12;
    var gcNotCurMonth="#E0E0E0";
    var gcRestDay="#FF0000";
    var gcWorkDay="#444444";
    var gcMouseOver="#79D0FF";
    var gcMouseOut="#F4F4F4";
    var gcToday="#444444";
    var gcTodayMouseOver="#6699FF";
    var gcTodayMouseOut="#79D0FF";
    var goSelectTag=new Array();
    var gdCurDate=new Date();
    var giYear=gdCurDate.getFullYear();
    var giMonth=gdCurDate.getMonth()+1;
    var giDay=gdCurDate.getDate();
function $()
{
    var elements=new Array();
   
    for(var i=0;i<arguments.length;i++)
    {
        var element=arguments[i];
       
        if(typeof(arguments[i])=='string')
        {
            element=document.getElementById(arguments[i]);
        }
        if(arguments.length==1)
        {
            return element;
        }
        elements.Push(element);
    }
   
    return elements;
}
Array.prototype.Push=function()
{
    var startLength=this.length;
   
    for(var i=0;i<arguments.length;i++)
    {
        this[startLength+i]=arguments[i];
    }
    return this.length;
}
String.prototype.HexToDec=function()
{
    return parseInt(this,16);
}
String.prototype.cleanBlank=function()
{
    return this.isEmpty()?"":this.replace(//s/g,"");
}
function checkColor()
{  
        var color_tmp=(arguments[0]+"").replace(//s/g,"").toUpperCase();
        var model_tmp1=arguments[1].toUpperCase();
        var model_tmp2="rgb("+arguments[1].substring(1,3).HexToDec()+","+arguments[1].substring(1,3).HexToDec()+","+arguments[1].substring(5).HexToDec()+")";
        model_tmp2=model_tmp2.toUpperCase();
        if(color_tmp==model_tmp1 ||color_tmp==model_tmp2)
        {
                 return true;
        }
        return false;
}
function $V()
{
    return $(arguments[0]).value;
}
function fPopCalendar(evt,popCtrl,dateCtrl)
{
    evt.cancelBubble=true;
    gdCtrl=dateCtrl;
    fSetYearMon(giYear,giMonth);
    var point=fGetXY(popCtrl);
    with($("calendardiv").style)
    {
        left=point.x+"px";
        top=(point.y+popCtrl.offsetHeight+1)+"px";
        visibility='visible';zindex='99';position='absolute';
    }
    $("calendardiv").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+splitChar+iMonthNew+splitChar+iDayNew;fHideCalendar();
}
function fHideCalendar()
{
    $("calendardiv").style.visibility="hidden";
   
    for(var i=0;i<goSelectTag.length;i++)
    {
        goSelectTag[i].style.visibility="visible";
    }
    goSelectTag.length=0;
}
function fSetSelected()
{
    var iOffset=0;
    var iYear=parseInt($("tbSelYear").value);
    var iMonth=parseInt($("tbSelMonth").value);
    var aCell=$("cellText"+arguments[0]);
    aCell.bgColor=gcMouseOut;
    with(aCell)
    {
        var iDay=parseInt(innerHTML);
       
        if(checkColor(style.color,gcNotCurMonth))
        {
            iOffset=(innerHTML>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(var 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(var d=0;d<7;d++)
    {
        aMonth[1][d]=(d<iDayOfFirst)?(iOffsetLast+d)*(-1):
        iDate++;
    }
    for(var w=2;w<7;w++)
    {
        for(var d=0;d<7;d++)
        {
            aMonth[w][d]=(iDate<=iDaysInMonth)?iDate++:(iNext++)*(-1);
        }
    }
    return aMonth;
}
function fDrawCal(iYear,iMonth,iCellHeight,iDateTextSize)
{
    var colorTD=" bgcolor='"+gcMouseOut+"' bordercolor='"+gcMouseOut+"'";
    var styleTD=" valign='middle' align='center' style='height:"+iCellHeight+"px;font-weight:bolder;font-size:"+iDateTextSize+"px;";
    var dateCal="";
    dateCal+="<tr>";
    for(var i=0;i<7;i++)
    {
        dateCal+="<td"+colorTD+styleTD+"color:#990099'>"+WeekDay[i]+"</td>";
    }
    dateCal+="</tr>";
   
    for(var w=1;w<7;w++)
    {
        dateCal+="<tr>";
       
        for(var d=0;d<7;d++)
        {
            var tmpid=w+""+d;
            dateCal+="<td"+styleTD+"cursor:pointer;' onclick='fSetSelected("+tmpid+")'>";
            dateCal+="<span id='cellText"+tmpid+"'></span>";
            dateCal+="</td>";
        }
        dateCal+="</tr>";
    }
    return dateCal;
}
function fUpdateCal(iYear,iMonth)
{
    var myMonth=fBuildCal(iYear,iMonth);
    var i=0;
    for(var w=1;w<7;w++)
    {
        for(var d=0;d<7;d++)
        {
            with($("cellText"+w+""+d))
            {
                parentNode.bgColor=gcMouseOut;parentNode.borderColor=gcMouseOut;
               
                parentNode.onmouseover=function()
                {
                this.bgColor=gcMouseOver;
                };
               
                parentNode.onmouseout=function()
                {
                    this.bgColor=gcMouseOut;
                };
               
                if(myMonth[w][d]<0)
                {
                    style.color=gcNotCurMonth;
                    innerHTML=Math.abs(myMonth[w][d]);
                }
                else
                {
                        style.color=((d==0)||(d==6))?gcRestDay:gcWorkDay;
                       
                        innerHTML=myMonth[w][d];
                       
                        if(iYear==giYear && iMonth==giMonth && myMonth[w][d]==giDay)
                        {
                            style.color=gcToday;parentNode.bgColor=gcTodayMouseOut;
                           
                            parentNode.onmouseover=function()
                            {
                                this.bgColor=gcTodayMouseOver;
                            };
                            parentNode.onmouseout=function()
                            {
                                this.bgColor=gcTodayMouseOut;
                            };
                   
                        }
                }
            }
        }
    }
}
function fSetYearMon(iYear,iMon)
{
    $("tbSelMonth").options[iMon-1].selected=true;

    for(var 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 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.toUpperCase()!="BODY");
   
    return pt;
}
function getDateDiv()
{
    var noSelectForIE="";
    var noSelectForFireFox="";
    if(document.all)
    {
        noSelectForIE="onselectstart='return false;'";
    }
    else
    {
        noSelectForFireFox="-moz-user-select:none;";
    }
    var dateDiv="";
    dateDiv+="<div id='calendardiv' onclick='event.cancelBubble=true' "+noSelectForIE+" style='"+noSelectForFireFox+"position:absolute;z-index:99;visibility:hidden;border:1px solid #999999;'>";dateDiv+="<table border='0' bgcolor='#E0E0E0' cellpadding='1' cellspacing='1' >";dateDiv+="<tr>";
    dateDiv+="<td><input type='button' id='PrevMonth' value='&lt;' style='height:20px;width:20px;font-weight:bolder;' onclick='fPrevMonth()'>";
    dateDiv+="</td><td><select id='tbSelYear' style='border:1px solid;' onchange='fUpdateCal($V(/"tbSelYear/"),$V(/"tbSelMonth/"))'>";
    for(var i=startYear;i<endYear;i++)
    {
        dateDiv+="<option value='"+i+"'>"+i+strYear+"</option>";}dateDiv+="</select></td><td>";
        dateDiv+="<select id='tbSelMonth' style='border:1px solid;' onchange='fUpdateCal($V(/"tbSelYear/"),$V(/"tbSelMonth/"))'>";
        for(var i=0;i<12;i++)
        {
            dateDiv+="<option value='"+(i+1)+"'>"+gMonths[i]+"</option>";
        }
        dateDiv+="</select></td><td>";
        dateDiv+="<input type='button' id='NextMonth' value='&gt;' style='height:20px;width:20px;font-weight:bolder;' onclick='fNextMonth()'>";
        dateDiv+="</td>";
        dateDiv+="</tr><tr>";
        dateDiv+="<td align='center' colspan='4'>";
        dateDiv+="<div style='background-color:#cccccc'><table width='100%' border='0' cellpadding='3' cellspacing='1'>";
        dateDiv+=fDrawCal(giYear,giMonth,dayTdHeight,dayTdTextSize);
        dateDiv+="</table></div>";
        dateDiv+="</td>";
        dateDiv+="</tr><tr><td align='center' colspan='4' nowrap>";
        dateDiv+="<span style='cursor:pointer;font-weight:bolder;' onclick='fSetDate(giYear,giMonth,giDay)' onmouseover='this.style.color=/""+gcMouseOver+"/"' onmouseout='this.style.color=/"#000000/"'>"+strToday+":"+giYear+strYear+giMonth+strMonth+giDay+strDay+"</span>";
        dateDiv+="</tr></tr>";dateDiv+="</table></div>";
       
        return dateDiv;

    }
with(document)
{
    onclick=fHideCalendar;
    write(getDateDiv());
}
</script>

input type="text" style="border: 1px solid #cccccc;" size="15" runat="server" onclick="fPopCalendar(event,this,this)"
    onfocus="this.select()" readonly="readonly" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值