template_calendar.js
上传用户:wenllgg125
上传日期:2020-04-09
资源大小:7277k
文件大小:6k
源码类别:

SCSI/ASPI

开发平台:

Others

  1. var is_ie = document.all ? true : false;
  2. var is_ff = window.addEventListener ? true : false;
  3. //得到控件的绝对位置
  4. function getposition(id) {
  5. e = document.getElementById(id);
  6. var t = e.offsetTop;
  7. var l = e.offsetLeft;
  8. while (e = e.offsetParent) {
  9. t += e.offsetTop;
  10. l += e.offsetLeft;
  11. }
  12. var r = new Array();
  13. r['x'] = l;
  14. r['y'] = t;
  15. return r;
  16. }
  17. //debug
  18. document.write('<div id="jsdebug"></div>');
  19. function d(e) {
  20. s = '';
  21. for(k in e) {
  22. t = typeof e[k];
  23. s += t + ' : <b>' + k + ' :</b> ' + e[k] + '<br />';
  24. }
  25. document.getElementById('jsdebug').innerHTML = s;
  26. }
  27. /***********************************************************************************************************************/
  28. var controlid; //控件 日历数值显示, 绝对位置定位
  29. var currdate  = null; //当前初始化时间 默认为本地时间
  30. var startdate  = null;  //日期范围 - 开始日期
  31. var enddate  = null;  //日期范围 - 截止日期
  32. var yy  = null;  //年
  33. var mm  = null; //月
  34. var i; //列
  35. var j; //行
  36. var currday = null;  //今天
  37. var today  = new Date();  //当前时间
  38. today.setHours(0);
  39. today.setMinutes(0);
  40. today.setSeconds(0);
  41. today.setMilliseconds(0);
  42. // pasedate('2005-1-2') 返回date对象
  43. function parsedate(s){
  44. if(s == ''){ return false;};
  45. var reg = new RegExp("[^0-9-]","")
  46. if(s.search(reg)>=0)
  47. return today;
  48. var ss = s.split("-");
  49. if(ss.length != 3)
  50. return today;
  51. if(isNaN(ss[0])||isNaN(ss[1])||isNaN(ss[2]))
  52. return today;
  53. return new Date(parseFloat(ss[0]),parseFloat(ss[1])-1,parseFloat(ss[2]));
  54. }
  55. function setdate(d){
  56. document.getElementById('calendardiv').style.display = 'none';
  57. controlid.value = yy + "-" + (mm+1) + "-" + d;
  58. }
  59. function myCancelBubble(event) {
  60. e = event ? event : window.event ;
  61. if(is_ff) {
  62. e.stopPropagation();
  63. } else if(is_ie) {
  64. e.cancelBubble = true;
  65. }
  66. }
  67. function initcalendar(){
  68. //当前时间
  69. s = '<style>';
  70. s += '#calendardiv{background-color:#FFFFCC;cursor:default;width:180px;}';
  71. s += '#calendardiv a{color:#333333;text-decoration:none;}';
  72. s += '#calendardiv table{border:1px solid #333333;width:100%}';
  73. s += '.expire, .expire a{color:#ccc;}';
  74. s += '.default, .default a{color:#333333}';
  75. s += '.checked, .checked a{font-weight:bold;}';
  76. s += '.today{color:#ffcc00}';
  77. s += '</style>';
  78. s += '<div id="calendardiv" style="display:none;position:absolute;" onclick="myCancelBubble(event)">';
  79. s += '<table cellpadding="2" cellspacing="4">';
  80. 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>';
  81. //s += '<tr><td id="prev"> </td><td colspan="5" id="yyyymm" align="center"></td></tr>';
  82. s += '<tr><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>';
  83. for(i=0; i <6; i++){
  84. s += "<tr>";
  85. for(j=1; j<=7; j++)
  86. s += "<td id=d"+(i*7+j)+" height="19">0</td>";
  87. s += "</tr>";
  88. }
  89. s += '</table>';
  90. s += '</div>';
  91. document.write(s);
  92. currday  = currdate ? currdate : today;// 默认为本地时间
  93. //点击隐藏
  94. document.onclick = function() {
  95. document.getElementById('calendardiv').style.display = 'none';
  96. }
  97. }
  98. function showcalendar(event, controlid1, startdate1, enddate1, defday){
  99. // 判断controlid position
  100. controlid   = document.getElementById(controlid1);
  101. startdate   = parsedate(document.getElementById(startdate1).value);
  102. enddate     = parsedate(document.getElementById(enddate1).value);
  103. defday = parsedate(defday);
  104. var p   = getposition(controlid1);
  105. document.getElementById('calendardiv').style.display = '';
  106. document.getElementById('calendardiv').style.left = p['x'] + 'px';
  107. document.getElementById('calendardiv').style.top  = p['y'] + 26 + 'px';
  108. myCancelBubble(event);
  109. drawcalendar(defday.getFullYear(),defday.getMonth());
  110. }
  111. // 刷新日历
  112. function drawcalendar(y, m){
  113. var x  = new Date(y, m, 1);
  114. var mv = x.getDay();
  115. var d = x.getDate();
  116. var de = null; // 单元格对象
  117. yy     = x.getFullYear();
  118. mm     = x.getMonth();
  119. document.getElementById("yyyymm").innerHTML = yy + "." + (mm+1 > 9  ? mm+1 : "0" + (mm+1));
  120. //将1号以前的单元设置为空
  121. for(var i=1; i<=mv; i++){
  122. de = document.getElementById("d"+i);
  123. de.innerHTML= "";
  124. de.className= "";
  125. }
  126. //开始画当月日历
  127. while(x.getMonth() == mm){
  128. de = document.getElementById("d"+(d+mv));
  129. if((enddate && x.getTime() > enddate.getTime()) || (startdate && x.getTime() < startdate.getTime())) {
  130. de.className = 'expire';
  131. de.innerHTML = d;
  132. }else{
  133. de.className = 'default';
  134. de.innerHTML = "<a href=javascript:setdate("+d+");>"+d+"</a>";
  135. }
  136. if(x.getTime() == currday.getTime()) {
  137. de.className = 'checked';
  138. }
  139. if(x.getTime() == today.getTime()) {
  140. de.className = 'today';
  141. }
  142. x.setDate(++d);
  143. }
  144. // 尾部空格
  145. while(d + mv <= 42){
  146. de = document.getElementById("d"+(d+mv));
  147. de.innerHTML = "";
  148. de.bgColor = "";
  149. de.className = "";
  150. d++;
  151. }
  152. }
  153. initcalendar();