前几天同学问我有没有记事日历控件,我肯定没有,到网上找了半天,发现网上对这一块根本都没有涉及,只是winform方面的有很多。没有办法,只有自己写一个,研究发现:日历控件根本于记事控件基本上没有什么区别,差别就是在于:记事控件要将需要做的事情再日历控件上面体现出来。
  1. var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  2. var width = "200";
  3. var offsetx = 2;
  4. var offsety = 8;
  5. var x=0;
  6. var y=0;
  7. var snow=0;
  8. var sw = 0;
  9. var cnt = 0;
  10. var dStyle;
  11. var Today = new Date();
  12. var tY = Today.getFullYear();
  13. var tM = Today.getMonth();
  14. var tD = Today.getDate();

  15. document.onmousemove = mEvn;

  16. //显示某一个月的天数
  17. function solarDays(y,m) {
  18. if(m==1)
  19. return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);
  20. else
  21. return(solarMonth[m]);
  22. }

  23. function selectOnchange()
  24. {
  25. var m;
  26. var y;
  27. y=document.getElementById("ys").selectedIndex+1900;
  28. m=document.getElementById("ms").selectedIndex;
  29. DateLay(y,m);
  30. }

  31. function getString()
  32. {
  33. return "今天有事情!";
  34. }
  35. function DateLay(y,m)
  36. {
  37. for(i=0;i<42;i++)
  38. {
  39. sdobj=window.document.getElementById("sd"+i);
  40. sdobj.innerHTML="";
  41. obj=new Date(y,m,1,0,0,0,0);
  42. obj.getDay();//当月的1号的星期几
  43. sd=i-obj.getDay();
  44. //window.location.href=
  45. if(sd>-1 && sd<SOLARDAYS(Y,M))
  46. {
  47. var sdate=y+"-"+(m+1)+"-"+(sd+1);
  48. var arrs=getString();
  49. // alert(arr[0]+""+arr[1]+""+sdate);
  50. for(var k=0;k<ARRS.LENGTH;K++)
  51. {
  52. if((arrs[k]!=null)&&(arrs[k]!=""))
  53. {
  54. // alert(sdate+"{}" +arrs[k]+"{}"+arrs[k].split("||")[0]);
  55. if(sdate==arrs[k].split("||")[0])
  56. {
  57. sdobj.innerHTML=""+(sd+1)+"
  58. "+arrs[k].split("||")[1]+"";
  59. break;
  60. }
  61. else
  62. {
  63. sdobj.innerHTML=""+(sd+1)+"
  64. ";
  65. }
  66. }
  67. }
  68. }
  69. }
  70. }
  71. function showInfo(v)
  72. {
  73. var s,festival;
  74. var sObj=document.getElementById('sd'+ v);
  75. var d=sObj.innerHTML-1;
  76. y=document.getElementById("ys").selectedIndex+1900;
  77. m=document.getElementById("ms").selectedIndex;

  78. if(sObj.innerHTML!='')
  79. {
  80. sObj.style.cursor = 's-resize';
  81. var sdate=y+"-"+(m+1)+"-"+(v-2);
  82. var arr=getString();
  83. //alert(arr[0]+"||"+sdate+"||"+(v-2));
  84. //alert(sdate==arr[0]);
  85. if(sdate==arr[0])
  86. {
  87. s=""+arr[1]+""
  88. document.getElementById("detail").innerHTML = s;
  89. }
  90. // alert(snow);
  91. if (snow == 0)
  92. {
  93. dStyle.style.left = x+offsetx-(width/2)+"px";
  94. dStyle.style.top = y+offsety+"px";
  95. dStyle.style.display = "block";
  96. snow = 1;
  97. }
  98. }
  99. }

  100. function getString()
  101. {
  102. var desc=window.document.getElementById("Hidden1").value;
  103. var arr=desc.split(";");
  104. return arr;
  105. }

  106. function hideinfo()
  107. {
  108. if ( cnt >= 1 ) { sw = 0; }
  109. if ( sw == 0 ) { snow = 0; dStyle.style.display = "none";}
  110. else cnt++;
  111. }

  112. function mEvn(event)
  113. {
  114. if(event==null)event=window.event;//IE
  115. x=event.x ? event.x : event.pageX
  116. y=event.y ? event.y : event.pageY;
  117. if (document.body.scrollLeft==0)
  118. {
  119. x=event.x+document.body.scrollLeft;
  120. y=event.y+document.body.scrollTop;
  121. }
  122. else if (snow==0)
  123. {
  124. dStyle.style.left = x+offsetx-(width/2)+"px";
  125. dStyle.style.top = y+offsety+"px";
  126. }
  127. }

  128. function initData()
  129. {
  130. var element=window.form1.elements;
  131. for(var i=0;i<ELEMENT.LENGTH;I++)
  132. {
  133. window.document.getElementById("divgroup").style.display="block";
  134. if(i==element.length-1)
  135. {
  136. window.document.getElementById("divgroup").style.display="none";
  137. }
  138. }
  139. dStyle=document.getElementById("detail");
  140. document.getElementById("ys").selectedIndex=tY-1900;
  141. document.getElementById("ms").selectedIndex=tM;
  142. DateLay(tY,tM);
  143. }
复制代码
对于上面  的函数:我只想说一点,getString()这个方法只是对后台获得字符串进行处理,对于后台你想以什么样的方式来组织字符串,你可以自己组织。对于点击日期连接到不通的地方,你可以再设置innerHtml的字符串中直接替换就可以了,代码直接写在aspx页面中,不是写在ascx中,稍后将贴出来ascx文件的控件,当然也可以以js文件组织这个控件。由于时间仓促,并没有对控件进行优化,阁下可以将这两个文件拿过去,自己重新优化一边,再贴上来,等有时间将这个控件整理一下子。

源码下载:附件: jishi.rar
TOP