一个适用于visual studio 2005的一个js日历控件--zhuan

最近要用到日历控件刚开始是使用梅花雨3.0不过发现了一些弹出的快慢还有定位的问题.总是有点麻烦.另外我是处于一个隐藏层内所以会有很多问题. 这个时候研究了下discuznt.net看到他们投票里面有一个很好的JS控件,内容如下

文件名为:calendar.js

 

var  is_ie  =  document.all  ?   true  :  false ;
var  is_ff  =  window.addEventListener  ?   true  :  false ;

// 得到控件的绝对位置
function  getposition(id)  ... {
    e 
= document.getElementById(id);
    
var t=e.offsetTop;
    
var l=e.offsetLeft;
    
while(e=e.offsetParent) ...{
        t
+=e.offsetTop;
        l
+=e.offsetLeft;
    }

    
var r = new Array();
    r[
'x'= l;
    r[
'y'= t;
    
return r;
}


// debug
document.write( ' <div id="jsdebug"></div> ' );
function  d(e)  ... {
    s 
= '';
    
for(k in e) ...{
        t 
= typeof e[k];
        s 
+= t+' : <b>'+k+' :</b> '+e[k]+'<br>';
    }

    document.getElementById(
'jsdebug').innerHTML = s;
}


/**/ /***********************************************************************************************************************/
var  controlid;                 // 控件 日历数值显示, 绝对位置定位
var  currdate      =   null ;             // 当前初始化时间    默认为本地时间
var  startdate      =   null ;          // 日期范围 - 开始日期
var  enddate      =   null ;          // 日期范围 - 截止日期
var  yy              =   null ;      //
var  mm              =   null ;         //
var  i;                     //
var  j;                     //
var  currday         =   null ;      // 今天
var  today          =   new  Date();      // 当前时间
today.setHours( 0 );
today.setMinutes(
0 );
today.setSeconds(
0 );
today.setMilliseconds(
0 );

//     pasedate('2005-1-2') 返回date对象
function  parsedate(s) ... {
    
if(s == '')...return false;};
    
var reg=new RegExp("[^0-9-]","")
    
if(s.search(reg)>=0)return today;
    
var ss=s.split("-");
    
if(ss.length!=3)return today;
    
if(isNaN(ss[0])||isNaN(ss[1])||isNaN(ss[2]))return today;
    
return new Date(parseFloat(ss[0]),parseFloat(ss[1])-1,parseFloat(ss[2]));
}


function  setdate(d) ... {
    document.getElementById(
'calendardiv').style.display = 'none';
    controlid.value 
= yy + "-" + (mm+1+ "-" + d;
}


function  myCancelBubble(event)  ... {
    e 
= event ? event : window.event ;
    
if(is_ff) ...{
        e.stopPropagation();
    }
 else if(is_ie) ...{
        e.cancelBubble 
= true;
    }

}


function  initcalendar() ... {
    
//当前时间
    s = '<style>';
    s 
+= '#calendardiv{background-color:#FFFFCC;cursor:default}';
    s 
+= '#calendardiv a{color:#333333;text-decoration:none;}';
    s 
+= '#calendardiv table{border:1px solid #333333}';
    s 
+= '.expire, .expire a{color:#ccc;}';
    s 
+= '.default, .default a{color:#333333}';
    s 
+= '.checked, .checked a{font-weight:bold;}';
    s 
+= '.today{color:#ffcc00}';
    s 
+= '</style>';
    s 
+= '<div id="calendardiv" style="display:none;position:absolute;" οnclick="myCancelBubble(event)">';
    s 
+= '<table cellpadding="2" cellspacing="4">';
    s 
+= '<tr><td colspan="7"><table width="100%" style="border:0px" align="center"><tr><td id="prev" align="center"><a href="javascript:drawcalendar(yy-1,mm);" title="上一年"><img src="../../images/page/first.gif" border="0" width="9" height="8" /></a>&nbsp; &nbsp<a href="javascript:drawcalendar(yy,mm-1);" title="上个月"><img src="../../images/page/prev.gif" border="0" width="8" height="8" /></a></td><td colspan="5" id="yyyymm" align="center"></td><td id="next" align="center"><a href="javascript:drawcalendar(yy,mm+1);" title="下个月"><img src="../../images/page/next.gif" border="0" width="8" height="8" /></a>&nbsp &nbsp;<a href="javascript:drawcalendar(yy+1,mm);" title="下一年"><img src="../../images/page/last.gif" border="0" width="9" height="8" /></a></td></tr></table></td></tr>';
    
//s += '<tr><td id="prev"> </td><td colspan="5" id="yyyymm" align="center"></td></tr>';
    s += '<tr><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>';
    
for(i=0; i <6; i++)...{
        s 
+= "<tr>";
        
for(j=1; j<=7; j++)
            s 
+= "<td id=d"+(i*7+j)+" height="19">0</td>";
        s 
+= "</tr>";
    }

    s 
+= '</table>';
    s 
+= '</div>';
    document.write(s);
    currday     
= currdate ? currdate : today;// 默认为本地时间
    //点击隐藏
    document.onclick = function() ...{
        document.getElementById(
'calendardiv').style.display = 'none';
    }

}


function  showcalendar(event, controlid1, startdate1, enddate1, defday) ... {
    
// 判断controlid position
    controlid   = document.getElementById(controlid1);
    startdate   
= parsedate(document.getElementById(startdate1).value);
    enddate     
= parsedate(document.getElementById(enddate1).value);
    defday        
= parsedate(defday);

    
var p   = getposition(controlid1);
    document.getElementById(
'calendardiv').style.display = 'block';
    document.getElementById(
'calendardiv').style.left = p['x'];
    document.getElementById(
'calendardiv').style.top  = p['y'+ 20;

    myCancelBubble(event);

    drawcalendar(defday.getFullYear(),defday.getMonth());
}


//  刷新日历
function  drawcalendar(y, m) ... {
    
var x  = new Date(y, m, 1);
    
var mv = x.getDay();
    
var d = x.getDate();
    
var de = null;                    // 单元格对象
    yy        = x.getFullYear();
    mm        
= x.getMonth();
    document.getElementById(
"yyyymm").innerHTML = yy + "." + (mm+1 > 9  ? mm+1 : "0" + (mm+1));
    
//将1号以前的单元设置为空
    for(var i=1; i<=mv; i++)...{
        de 
= document.getElementById("d"+i);
        de.innerHTML
= "";
        de.className
= "";
    }


    
//开始画当月日历
    while(x.getMonth() == mm)...{
        de 
= document.getElementById("d"+(d+mv));
        
if((enddate && x.getTime() > enddate.getTime()) || (startdate && x.getTime() < startdate.getTime())) ...{
            de.className 
= 'expire';
            de.innerHTML 
= d;
        }
else...{
            de.className 
= 'default';
            de.innerHTML 
= "<a href=javascript:setdate("+d+");>"+d+"</a>";
        }

        
if(x.getTime() == currday.getTime()) ...{
            de.className 
= 'checked';
        }

        
if(x.getTime() == today.getTime()) ...{
            de.className 
= 'today';
        }

        x.setDate(
++d);
    }

    
// 尾部空格
    while(d + mv <= 42)...{
        de 
= document.getElementById("d"+(d+mv));
        de.innerHTML 
= "";
        de.bgColor 
= "";
        de.className 
= "";
        d
++;
    }

}


initcalendar();

那么我再default.aspx里面要引用这个怎么使用呢.

下面就是default.aspx的前台代码

首先再<head></head>标签内部填入以下(当然这个路径你要注意哦,我是放在一个目录下的)

     < script language = " javascript "  type = " text/javascript "  src = " calendar.js " ></ script >

 看到这个calendar.js里面有句function showcalendar(event, controlid1, startdate1, enddate1, defday)

其中controlid1表示要使用这个日历的空间的ID,startdate1,enddate1,表示指示开始以及指定时间的范围的空间的ID.defday

 

这样我再default.aspx里面放上三个input,两个是runat server,因为我需要取得还有生成开始值

记得后两个input 为hidden.

  < asp:TextBox ID = " enddatetime "  runat = " server "  onClick = " showcalendar(event, 'enddatetime', 'cal_startdate', 'cal_enddate','cal_enddate') " ></ asp:TextBox >& nbsp;
< input type = " hidden "  name = " cal_startdate "  runat = " server "  id = " cal_startdate " />
< input type = " hidden "  name = " cal_enddate "  id = " cal_enddate "  runat = " server "   />

 

那么我在default.aspx.cs里面生成初始值也就是当前的值

 

     protected   void  Page_Load( object  sender, EventArgs e)
    
... {
        cal_startdate.Value 
= DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString();
    
    }

 

ok  run一下,发现在当前值之前的日期始灰色不可选取的.哈哈.就这样了.我喜欢这个效果,特别始放在投票里面

http://blog.csdn.net/xiong1000/archive/2006/08/18/1090595.aspx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值