ASP.net下的前台日历控件源代码(不刷新页面)Calendar .js

这是一个JavaScript实现的ASP.NET前端日历控件,名为Calendar.js,功能包括显示月份和年份的下拉框,支持不刷新页面选择日期。控件提供了初始化、事件处理和样式切换等方法,可用于网页中方便用户选择日期。
摘要由CSDN通过智能技术生成

//Calendar .js

//目的:月历
/*参数:
//  xx. YYYY/MM/DD   VER     AUTHOR      COMMENTS
     1. 2004/08/26   1.00    Michael     New Create
 * ---------------------------------------------------------------------
 */
/** The Calendar object constructor. */
var dateType=0;
var ChinaDateFlg=false;
var FirstOpenFlg=true;
Calendar = function (mondayFirst, dateStr, onSelected, onClose) {
 // member variables
 this.activeDiv = null;
 this.currentDateEl = null;
 this.checkDisabled = null;
 this.timeout = null;
 this.onSelected = onSelected || null;
 this.onClose = onClose || null;
 this.dragging = false;
 this.hidden = false;
 this.minYear = 1970;
 this.maxYear = 2050;
 this.dateFormat =  
 this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];
 this.isPopup = true;
 this.weekNumbers = true;
 this.mondayFirst = mondayFirst;
 this.dateStr = dateStr;
 this.ar_days = null;
 // HTML elements
 this.table = null;
 this.element = null;
 this.tbody = null;
 this.firstdayname = null;
 // Combo boxes
 this.monthsCombo = null;
 this.yearsCombo = null;
 this.hilitedMonth = null;
 this.activeMonth = null;
 this.hilitedYear = null;
 this.activeYear = null;

 // one-time initializations
 if (!Calendar._DN3) {
  // table of short day names
  var ar = new Array();
  for (var i = 8; i > 0;) {
   ar[--i] = Calendar._DN[i].substr(0, 3);
  }
  Calendar._DN3 = ar;
  // table of short month names
  ar = new Array();
  for (var i = 12; i > 0;) {
   ar[--i] = Calendar._MN[i].substr(0, 3);
  }
  Calendar._MN3 = ar;
 }
};

// ** constants

/// "static", needed for event handlers.
Calendar._C = null;

/// detect a special case of "web browser"
Calendar.is_ie = ( (navigator.userAgent.toLowerCase().indexOf("msie") != -1) &&
     (navigator.userAgent.toLowerCase().indexOf("opera") == -1) );

// short day names array (initialized at first constructor call)
Calendar._DN3 = null;

// short month names array (initialized at first constructor call)
Calendar._MN3 = null;

// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate
//        library, at some point.

Calendar.getAbsolutePos = function(el) {
 var r = { x: el.offsetLeft, y: el.offsetTop };
 if (el.offsetParent) {
  var tmp = Calendar.getAbsolutePos(el.offsetParent);
  r.x += tmp.x;
  r.y += tmp.y;
 }

 return r;
};

Calendar.isRelated = function (el, evt) {
 var related = evt.relatedTarget;
 if (!related) {
  var type = evt.type;
  if (type == "mouseover") {
   related = evt.fromElement;
  } else if (type == "mouseout") {
   related = evt.toElement;
  }
 }
 while (related) {
  if (related == el) {
   return true;
  }
  related = related.parentNode;
 }
 return false;
};

Calendar.removeClass = function(el, className) {
 if (!(el && el.className)) {
  return;
 }
 var cls = el.className.split(" ");
 var ar = new Array();
 for (var i = cls.length; i > 0;) {
  if (cls[--i] != className) {
   ar[ar.length] = cls[i];
  }
 }
 el.className = ar.join(" ");
};

Calendar.addClass = function(el, className) {
 Calendar.removeClass(el, className);
 el.className += " " + className;
};

Calendar.getElement = function(ev) {
 if (Calendar.is_ie) {
  return window.event.srcElement;
 } else {
  return ev.currentTarget;
 }
};

Calendar.getTargetElement = function(ev) {
 if (Calendar.is_ie) {
  return window.event.srcElement;
 } else {
  return ev.target;
 }
};

Calendar.stopEvent = function(ev) {
 if (Calendar.is_ie) {
  window.event.cancelBubble = true;
  window.event.returnValue = false;
 } else {
  ev.preventDefault();
  ev.stopPropagation();
 }
};

Calendar.addEvent = function(el, evname, func) {
 if (Calendar.is_ie) {
  el.attachEvent("on" + evname, func);
 } else {
  el.addEventListener(evname, func, true);
 }
};

Calendar.removeEvent = function(el, evname, func) {
 if (Calendar.is_ie) {
  el.detachEvent("on" + evname, func);
 } else {
  el.removeEventListener(evname, func, true);
 }
};

Calendar.createElement = function(type, parent) {
 var el = null;
 if (document.createElementNS) {
  el = document.createElementNS("", type);
 } else {
  el = document.createElement(type);
 }
 if (typeof parent != "undefined") {
  parent.appendChild(el);
 }
 return el;
};

Calendar._add_evs = function(el) {
 with (Calendar) {
  addEvent(el, "mouseover", dayMouseOver);
  addEvent(el, "mousedown", dayMouseDown);
  addEvent(el, "mouseout", dayMouseOut);
  if (is_ie) {
   addEvent(el, "dblclick", dayMouseDblClick);
   el.setAttribute("unselectable", true);
  }
 }
};

Calendar.findMonth = function(el) {
 if (typeof el.month != "undefined") {
  return el;
 } else if (typeof el.parentNode.month != "undefined") {
  return el.parentNode;
 }
 return null;
};

Calendar.findYear = function(el) {
 if (typeof el.year != "undefined") {
  return el;
 } else if (typeof el.parentNode.year != "undefined") {
  return el.parentNode;
 }
 return null;
};

Calendar.showMonthsCombo = function () {
 var cal = Calendar._C;
 if (!cal) {
  return false;
 }
 var cal = cal;
 var cd = cal.activeDiv;
 var mc = cal.monthsCombo;
 if (cal.hilitedMonth) {
  Calendar.removeClass(cal.hilitedMonth, "hilite");
 }
 if (cal.activeMonth) {
  Calendar.removeClass(cal.activeMonth, "active");
 }
 var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];
 Calendar.addClass(mon, "active");
 cal.activeMonth = mon;
 mc.style.left = cd.offsetLeft + "px";
 mc.style.top = (cd.offsetTop + cd.offsetHeight) + "px";
 mc.style.display = "block";
};

Calendar.showYearsCombo = function (fwd) {
 var cal = Calendar._C;
 if (!cal) {
  return false;
 }
 var cal = cal;
 var cd = cal.activeDiv;
 var yc = cal.yearsCombo;
 if (cal.hilitedYear) {
  Calendar.removeClass(cal.hilitedYear, "hilite");
 }
 if (cal.activeYear) {
  Calendar.removeClass(cal.activeYear, "active");
 }
 cal.activeYear = null;
 var Y = cal.date.getFullYear() + (fwd ? 1 : -1);
 var yr = yc.firstChild;
 var show = false;
 for (var i = 12; i > 0; --i) {
  if (Y >= cal.minYear && Y <= cal.maxYear) {
   yr.firstChild.data = Y;
   yr.year = Y;
   yr.style.display = "block";
   show = true;
  } else {
   yr.style.display = "none";
  }
  yr = yr.nextSibling;
  Y += fwd ? 2 : -2;
 }
 if (show) {
  yc.style.left = cd.offsetLeft + "px";
  yc.style.top = (cd.offsetTop + cd.offsetHeight) + "px";
  yc.style.display = "block";
 }
};

// event handlers

Calendar.tableMouseUp = function(ev) {

 var cal = Calendar._C;
 if (!cal) {
  return false;
 }
 if (cal.timeout) {
  clearTimeout(cal.timeout);
 }
 var el = cal.activeDiv;
 if (!el) {
  return false;
 }
 var target = Calendar.getTargetElement(ev);

 Calendar.removeClass(el, "active");
 if (target == el || target.parentNode == el) {
  Calendar.cellClick(el);
 }
 var mon = Calendar.findMonth(target);
 var date = null;
 if (mon) {
  date = new Date(cal.date);
  if (mon.month != date.getMonth()) {
   date.setMonth(mon.month);
   cal.setDate(date);
  }
 } else {
  var year = Calendar.findYear(target);
  if (year) {
   date = new Date(cal.date);
   if (year.year != date.getFullYear()) {
    date.setFullYear(year.year);
    cal.setDate(date);
   }
  }
 }
 with (Calendar) {
  removeEvent(document, "mouseup", tableMouseUp);
  removeEvent(document, "mouseover", tableMouseOver);
  removeEvent(document, "mousemove", tableMouseOver);
  cal._hideCombos();
  stopEvent(ev);
  _C = null;
 }
};

Calendar.tableMouseOver = function (ev) {
 var cal = Calendar._C;
 if (!cal) {
  return;
 }
 var el = cal.activeDiv;
 var target = Calendar.getTargetElement(ev);
 if (target == el || target.parentNode == el) {
  Calendar.addClass(el, "hilite active");
  Calendar.addClass(el.parentNode, "rowhilite");
 } else {
  Calendar.removeClass(el, "active");
  Calendar.removeClass(el, "hilite");
  Calendar.removeClass(el.parentNode, "rowhilite");
 }
 var mon = Calendar.findMonth(target);
 if (mon) {
  if (mon.month != cal.date.getMonth()) {
   if (cal.hilitedMonth) {
    Calendar.removeClass(cal.hilitedMonth, "hilite");
   }
   Calendar.addClass(mon, "hilite");
   cal.hilitedMonth = mon;
  } else if (cal.hilitedMonth) {
   Calendar.removeClass(cal.hilitedMonth, "hilite");
  }
 } else {
  var year = Calendar.findYear(target);
  if (year) {
   if (year.year != cal.date.getFullYear()) {
    if (cal.hilitedYear) {
     Calendar.removeClass(cal.hilitedYear, "hilite");
    }
    Calendar.addClass(year, "hilite");
    cal.hilitedYear = year;
   } else if (cal.hilitedYear) {
    Calendar.removeClass(cal.hilitedYear, "hilite");
   }
  }
 }
 Calendar.stopEvent(ev);
};

Calendar.tableMouseDown = function (ev) {
 if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {
  Calendar.stopEvent(ev);
 }
};

Calendar.calDragIt = function (ev) {
 var cal = Calendar._C;
 if (!(cal && cal.dragging)) {
  return false;
 }
 var posX;
 var posY;
 if (Calendar.is_ie) {
  posY = window.event.clientY + document.body.scrollTop;
  posX = window.event.clientX + document.body.scrollLeft;
 } else {
  posX = ev.pageX;
  posY = ev.pageY;
 }
 cal.hideShowCovered();
 var st = cal.element.style;
 st.left = (posX - cal.xOffs) + "px";
 st.top = (posY - cal.yOffs) + "px";
 Calendar.stopEvent(ev);
};

Calendar.calDragEnd = function (ev) {
 var cal = Calendar._C;
 if (!cal) {
  return false;
 }
 cal.dragging = false;
 with (Calendar) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值