前几天同学问我有没有记事日历控件,我肯定没有,到网上找了半天,发现网上对这一块根本都没有涉及,只是winform方面的有很多。没有办法,只有自己写一个,研究发现:日历控件根本于记事控件基本上没有什么区别,差别就是在于:记事控件要将需要做的事情再日历控件上面体现出来。
- var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
- var width = "200";
- var offsetx = 2;
- var offsety = 8;
- var x=0;
- var y=0;
- var snow=0;
- var sw = 0;
- var cnt = 0;
- var dStyle;
- var Today = new Date();
- var tY = Today.getFullYear();
- var tM = Today.getMonth();
- var tD = Today.getDate();
- document.onmousemove = mEvn;
- //显示某一个月的天数
- function solarDays(y,m) {
- if(m==1)
- return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);
- else
- return(solarMonth[m]);
- }
- function selectOnchange()
- {
- var m;
- var y;
- y=document.getElementById("ys").selectedIndex+1900;
- m=document.getElementById("ms").selectedIndex;
- DateLay(y,m);
- }
- function getString()
- {
- return "今天有事情!";
- }
- function DateLay(y,m)
- {
- for(i=0;i<42;i++)
- {
- sdobj=window.document.getElementById("sd"+i);
- sdobj.innerHTML="";
- obj=new Date(y,m,1,0,0,0,0);
- obj.getDay();//当月的1号的星期几
- sd=i-obj.getDay();
- //window.location.href=
- if(sd>-1 && sd<SOLARDAYS(Y,M))
- {
- var sdate=y+"-"+(m+1)+"-"+(sd+1);
- var arrs=getString();
- // alert(arr[0]+""+arr[1]+""+sdate);
- for(var k=0;k<ARRS.LENGTH;K++)
- {
- if((arrs[k]!=null)&&(arrs[k]!=""))
- {
- // alert(sdate+"{}" +arrs[k]+"{}"+arrs[k].split("||")[0]);
- if(sdate==arrs[k].split("||")[0])
- {
- sdobj.innerHTML=""+(sd+1)+"
- "+arrs[k].split("||")[1]+"";
- break;
- }
- else
- {
- sdobj.innerHTML=""+(sd+1)+"
- ";
- }
- }
- }
- }
- }
- }
- function showInfo(v)
- {
- var s,festival;
- var sObj=document.getElementById('sd'+ v);
- var d=sObj.innerHTML-1;
- y=document.getElementById("ys").selectedIndex+1900;
- m=document.getElementById("ms").selectedIndex;
- if(sObj.innerHTML!='')
- {
- sObj.style.cursor = 's-resize';
- var sdate=y+"-"+(m+1)+"-"+(v-2);
- var arr=getString();
- //alert(arr[0]+"||"+sdate+"||"+(v-2));
- //alert(sdate==arr[0]);
- if(sdate==arr[0])
- {
- s=""+arr[1]+""
- document.getElementById("detail").innerHTML = s;
- }
- // alert(snow);
- if (snow == 0)
- {
- dStyle.style.left = x+offsetx-(width/2)+"px";
- dStyle.style.top = y+offsety+"px";
- dStyle.style.display = "block";
- snow = 1;
- }
- }
- }
- function getString()
- {
- var desc=window.document.getElementById("Hidden1").value;
- var arr=desc.split(";");
- return arr;
- }
- function hideinfo()
- {
- if ( cnt >= 1 ) { sw = 0; }
- if ( sw == 0 ) { snow = 0; dStyle.style.display = "none";}
- else cnt++;
- }
- function mEvn(event)
- {
- if(event==null)event=window.event;//IE
- x=event.x ? event.x : event.pageX
- y=event.y ? event.y : event.pageY;
- if (document.body.scrollLeft==0)
- {
- x=event.x+document.body.scrollLeft;
- y=event.y+document.body.scrollTop;
- }
- else if (snow==0)
- {
- dStyle.style.left = x+offsetx-(width/2)+"px";
- dStyle.style.top = y+offsety+"px";
- }
- }
- function initData()
- {
- var element=window.form1.elements;
- for(var i=0;i<ELEMENT.LENGTH;I++)
- {
- window.document.getElementById("divgroup").style.display="block";
- if(i==element.length-1)
- {
- window.document.getElementById("divgroup").style.display="none";
- }
- }
- dStyle=document.getElementById("detail");
- document.getElementById("ys").selectedIndex=tY-1900;
- document.getElementById("ms").selectedIndex=tM;
- DateLay(tY,tM);
- }
复制代码对于上面 的函数:我只想说一点,getString()这个方法只是对后台获得字符串进行处理,对于后台你想以什么样的方式来组织字符串,你可以自己组织。对于点击日期连接到不通的地方,你可以再设置innerHtml的字符串中直接替换就可以了,代码直接写在aspx页面中,不是写在ascx中,稍后将贴出来ascx文件的控件,当然也可以以js文件组织这个控件。由于时间仓促,并没有对控件进行优化,阁下可以将这两个文件拿过去,自己重新优化一边,再贴上来,等有时间将这个控件整理一下子。
源码下载:附件:
jishi.rar