JavaScript实现日历控件

var strFrame;
//日历用iframe实现        
document.writeln('<iframe id=yyDateLayer  frameborder=no scrolling=no Author=yy style="position: absolute; width: 145; height: 168; z-index: 9998;display=none"></iframe>')
//ifram中用div定位
strFrame+='<div style="z-index:9999;position: absolute; left:0; top:0;" onselectstart="return false">'
strFrame
+='<span id=tmpSelectYearLayer  style="z-index: 9999;position: absolute;top: 2; left: 18;display: none"></span>';
strFrame
+='<span id=tmpSelectMonthLayer style="z-index: 9999;position: absolute;top: 2; left: 75;display: none"></span>';
strFrame
+='<table border=0 cellspacing=1 cellpadding=0 width=142 height=160 bgcolor=#808080 onselectstart="return false" Author=yy>';
strFrame
+='<tr>';
strFrame
+='<td width=142 height=23 bgcolor=#FFFFFF>';
strFrame
+='<table border=0 cellspacing=1 cellpadding=0 width=140 height=23 Author=yy>';
strFrame
+='<tr align=center>'
strFrame
+='<td width=20 Author=yy align=center bgcolor=#808080 style="font-size:12px;cursor: hand;color: #FFD700" ';
strFrame
+=' onclick="parent.yyPrevM()" title="向前翻月" ><b Author=yy>&lt;&lt;</b>';
strFrame
+=' </td>'
strFrame
+='<td width=60 align=right style="font-size:12px;cursor:default" title="点击这里选择年份">';
strFrame
+=' <span width=60 Author=yy id=yyYearHead onclick="parent.tmpSelectYearInnerHTML(this.innerText)"></span>&nbsp;年&nbsp;';
strFrame
+='</span>';
strFrame
+='<td width=48 align=left style="font-size:12px;cursor:default" title="点击这里选择月份">';
strFrame
+='<span  id=yyMonthHead Author=yy onclick="parent.tmpSelectMonthInnerHTML(this.innerText)"></span>&nbsp;月';
strFrame
+='</td>';
strFrame
+=' <td width=20 bgcolor=#808080 align=center style="font-size:12px;cursor: hand;color: #FFD700" ';
strFrame
+=' onclick="parent.yyNextM()" title="往后翻月" Author=yy><b Author=yy>&gt;&gt;</b></td></tr>';
strFrame
+=' </table></td></tr>';
strFrame
+=' <tr><td width=142 height=18 bgcolor=#808080>';
strFrame
+='<table border=0 cellspacing=0 cellpadding=0 width=140 height=1 style="cursor:default">';
strFrame
+='<tr align=center><td style="font-size:12px;color:#FFFFFF" Author=yy>日</td>';
strFrame
+='<td style="font-size:12px;color:#FFFFFF" Author=yy>一</td><td style="font-size:12px;color:#FFFFFF" Author=yy>二</td>';
strFrame
+='<td style="font-size:12px;color:#FFFFFF" Author=yy>三</td><td style="font-size:12px;color:#FFFFFF" Author=yy>四</td>';
strFrame
+='<td style="font-size:12px;color:#FFFFFF" Author=yy>五</td><td style="font-size:12px;color:#FFFFFF" Author=yy>六</td></tr>';
strFrame
+='</table></td></tr>';
strFrame
+=' <tr><td width=142 height=120>';
strFrame
+=' <table border=0 cellspacing=1 cellpadding=0 width=140 height=120 bgcolor=#FFFFFF>';
var n=0
for (j=0;j<5;j++)

    strFrame
+='<tr align=center>'
    
for (i=0;i<7;i++)
    
{
        strFrame
+='<td width=20 height=20 id=yyDay'+n+' style="font-size:12px" onclick=parent.yyDayClick(this.innerText)></td>';n++;
    }

        strFrame
+='</tr>';
}

strFrame
+=' <tr align=center><td width=20 height=20 style="font-size:12px" id=yyDay35 Author=yy ';
strFrame
+=' onclick=parent.yyDayClick(this.innerText)></td>';
strFrame
+=' <td width=20 height=20 style="font-size:12px" id=yyDay36 Author=yy onclick=parent.yyDayClick(this.innerText)></td>';
strFrame
+='  <td colspan=5 align=right Author=yy><span onclick=parent.closeLayer() style="font-size:12px;cursor: hand"';
strFrame
+='  Author=yy><u>关闭</u></span></td></tr>';
strFrame
+='  </table></td></tr><tr><td>';
strFrame
+='  <table border=0 cellspacing=1 cellpadding=0 width=100% bgcolor=#FFFFFF>';
strFrame
+='  <tr>';
strFrame
+='</tr></table></td></tr></table></div>';
window.frames.yyDateLayer.document.writeln(strFrame); 
window.frames.yyDateLayer.document.close();        
//解决ie进度条不结束的问题 


var outObject;
var odatelayer=window.frames.yyDateLayer.document.all;        //存放日历对象 

function setday(tt,obj) //主调函数 

    
    
if (arguments.length > 2){alert("对不起!传入本控件的参数太多!");return;} 
    
if (arguments.length == 0){alert("对不起!您没有传回本控件任何参数!");return;} 
    
var dads = document.all.yyDateLayer.style; 
    
var th = tt; 
    
var ttop = tt.offsetTop; //TT控件的定位点高 
    var thei = tt.clientHeight; //TT控件本身的高 
    var tleft = tt.offsetLeft; //TT控件的定位点宽 
    var ttyp = tt.type; //TT控件的类型 
    while (tt = tt.offsetParent){ttop+=tt.offsetTop; tleft+=tt.offsetLeft;} 
    dads.top 
= (ttyp=="image")? ttop+thei : ttop+thei+6
    dads.left 
= tleft; 
    outObject 
= (arguments.length == 1? th : obj; 
    outButton 
= (arguments.length == 1? null : th;    //设定外部点击的按钮 
    dads.top  = (ttyp=="image")? ttop+thei : ttop+thei+6;
    dads.left 
= tleft;
    outObject 
= (arguments.length == 1? th : obj;
    dads.display 
= '';
  event.returnValue
=false;
}
 
////////////////////////

var MonHead = new Array(12);         
    MonHead[
0= 31; MonHead[1= 28; MonHead[2= 31; MonHead[3= 30; MonHead[4]  = 31; MonHead[5]  = 30;
    MonHead[
6= 31; MonHead[7= 31; MonHead[8= 30; MonHead[9= 31; MonHead[10= 30; MonHead[11= 31;
var yyTheYear=new Date().getFullYear(); 
var yyTheMonth=new Date().getMonth()+1
var yyWDay=new Array(37);               
function document.onclick() 

  
with(window.event.srcElement)
  
if (getAttribute("Author")==null && tagName != "INPUT")
   document.all.yyDateLayer.style.display
="none";
  }

}

function yyWriteHead(yy,mm)  
  

    window.frames.yyDateLayer.document.all.yyYearHead.innerText  
= yy ;
    window.frames.yyDateLayer.document.all.yyMonthHead.innerText 
= mm;
  }

  
function tmpSelectYearInnerHTML(strYear) //年份的下拉框 


if (strYear.match(/D/)!=null){alert("年份输入参数不是数字!");return;} 
var m = (strYear) ? strYear : new Date().getFullYear(); 
if (m < 1000 || m > 9999{alert("年份值不在 1000 到 9999 之间!");return;} 
var n = m - 10
if (n < 1000) n = 1000
if (n + 26 > 9999) n = 9974
var s = "<select Author=yy name=tmpSelectYear style='font-size: 12px' " 
+= "onblur='document.all.tmpSelectYearLayer.style.display="none"' " 
+= "onchange='document.all.tmpSelectYearLayer.style.display="none";" 
+= "parent.yyTheYear = this.value; parent.yySetDay(parent.yyTheYear,parent.yyTheMonth)'> "
var selectInnerHTML = s; 
for (var i = n; i < n + 26; i++

if (i == m) 
{selectInnerHTML += "<option Author=yy value='" + i + "' selected>" + i + "" + "</option> ";} 
else {selectInnerHTML += "<option Author=yy value='" + i + "'>" + i + "" + "</option> ";} 
}
 
selectInnerHTML 
+= "</select>"
odatelayer.tmpSelectYearLayer.style.display
=""
odatelayer.tmpSelectYearLayer.innerHTML 
= selectInnerHTML; 
odatelayer.tmpSelectYear.focus(); 
}
 
//月份下拉框
function tmpSelectMonthInnerHTML(strMonth)
{
  
if (strMonth.match(/D/)!=null){alert("月份输入参数不是数字!");return;}
  
var m = (strMonth) ? strMonth : new Date().getMonth() + 1;
  
var s = "<select Author=yy name=tmpSelectMonth style='font-size: 12px' "
     s 
+= "onblur='document.all.tmpSelectMonthLayer.style.display="none"' "
     s 
+= "onchange='document.all.tmpSelectMonthLayer.style.display="none";"
     s 
+= "parent.yyTheMonth = this.value; parent.yySetDay(parent.yyTheYear,parent.yyTheMonth)'> ";
  
var selectInnerHTML = s;
  
for (var i = 1; i < 13; i++)
  
{
    
if (i == m)
       
{selectInnerHTML += "<option value='"+i+"' selected>"+i+""+"</option> ";}
    
else {selectInnerHTML += "<option value='"+i+"'>"+i+""+"</option> ";}
  }

  selectInnerHTML 
+= "</select>";
  odatelayer.tmpSelectMonthLayer.style.display
="";
  odatelayer.tmpSelectMonthLayer.innerHTML 
= selectInnerHTML;
  odatelayer.tmpSelectMonth.focus();
}


function closeLayer()           
  
{
    document.all.yyDateLayer.style.display
="none"
  }

function document.onkeydown()
  
{
    
if (window.event.keyCode==27)document.all.yyDateLayer.style.display="none";
  }

function IsPinYear(year)         
  
{
    
if (0==year%4&&((year%100!=0)||(year%400==0))) return true;else return false;
  }

function GetMonthCount(year,month)
  
{
    
var c=MonHead[month-1];if((month==2)&&IsPinYear(year)) c++;return c;
  }

function GetDOW(day,month,year)    
  
{
    
var dt=new Date(year,month-1,day).getDay()/7return dt;
  }

function yyPrevY() 
  
{
    
if(yyTheYear > 999 && yyTheYear <10000){yyTheYear--;}
    
else{alert("年份超出范围(1000-9999)!");}
    yySetDay(yyTheYear,yyTheMonth);
  }

function yyNextY() 
  
{
    
if(yyTheYear > 999 && yyTheYear <10000){yyTheYear++;}
    
else{alert("年份超出范围(1000-9999)!");}
    yySetDay(yyTheYear,yyTheMonth);
  }

function yyToday() 
  
{
    yyTheYear 
= new Date().getFullYear();
    yyTheMonth 
= new Date().getMonth()+1;
    yySetDay(yyTheYear,yyTheMonth);
  }

function yyPrevM() 
  
{
    
if(yyTheMonth>1){yyTheMonth--}else{yyTheYear--;yyTheMonth=12;}
    yySetDay(yyTheYear,yyTheMonth);
  }

function yyNextM() 
  
{
    
if(yyTheMonth==12){yyTheYear++;yyTheMonth=1}else{yyTheMonth++}
    yySetDay(yyTheYear,yyTheMonth);
  }

function yySetDay(yy,mm)
{
  yyWriteHead(yy,mm);
  
for (var i = 0; i < 37; i++){yyWDay[i]=""};
  
var day1 = 1,firstday = new Date(yy,mm-1,1).getDay(); 
  
for (var i = firstday; day1 < GetMonthCount(yy,mm)+1; i++){yyWDay[i]=day1;day1++;}
  
for (var i = 0; i < 37; i++)
  
var da = eval("window.frames.yyDateLayer.document.all.yyDay"+i)   
    
if (yyWDay[i]!="")
      
{ da.innerHTML = "<b>" + yyWDay[i] + "</b>";
        da.style.backgroundColor 
= (yy == new Date().getFullYear() &&
        mm 
== new Date().getMonth()+1 && yyWDay[i] == new Date().getDate()) ? "#FFD700" : "#ADD8E6";
        da.style.cursor
="hand"
      }

    
else{da.innerHTML="";da.style.backgroundColor="";da.style.cursor="default"}
  }

}

function yyDayClick(n) 
{
  
var yy = yyTheYear;
  
var mm = yyTheMonth;
  
if (mm < 10){mm = "0" + mm;}
  
if (outObject)
  
{
    
if (!n) {outObject.value=""return;}
    
if ( n < 10){n = "0" + n;}
    outObject.value
= yy + "-" + mm + "-" + n ;
    closeLayer(); 
  }

  
else {closeLayer(); alert("您所要输出的控件对象并不存在!");}
}

yySetDay(yyTheYear,yyTheMonth);

function show_calendar_time(str_target,str_datetime){
    
var args,urls,tmp;

    args 
= new Array(3);

    args[
0= str_target;
    args[
1= str_datetime;
    args[
2= self;

    urls 
= "../UserControls/Date/calendar_time.html";

    
if (str_datetime.length > 0){
        
var re_date = /^(d+)-(d+)-(d+)s+(d+):(d+):(d+)$/;
        
if (re_date.exec(str_datetime)){
            urls 
+= "?";
            urls 
+= RegExp.$1;
            urls 
+= RegExp.$2;

            tmp 
= new Date (RegExp.$1, RegExp.$2-1, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6);
            urls 
+= tmp.getTime();
        }

    }

    window.showModalDialog(urls, args,
    
"dialogWidth:260px;dialogHeight:300px;help=no;");
}

 然后调用

 

<HTML>
    
<HEAD>
        
<title>DateSelectSample</title>
        
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        
<meta name="CODE_LANGUAGE" Content="C#">
        
<meta name="vs_defaultClientScript" content="JavaScript">
        
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        
<script src="date.js"></script>
    
</HEAD>
    
<body MS_POSITIONING="GridLayout">
        
<form id="Form1" method="post" runat="server">
            
<FONT face="宋体">
                
<asp:TextBox id="TextBox1" onfocus="setday(this)" style="Z-INDEX: 101; LEFT: 160px; POSITION: absolute; TOP: 336px"
                    runat
="server"></asp:TextBox></FONT>
        
</form>
    
</body>
</HTML>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值