JavaScript 日期下拉选择器
作者:cloudgamer 来源:cloudgamer博客 发布时间:2008-10-31 12:13:00
标签:日期,选择,select,javascript
把程序重新写了一遍,日期下拉选择器,可自定义日期范围。
使用了一个技巧获取指定月份的天数。
演示页面:DateSelector.htm
程序代码:
var $ = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
};
function addEventHandler(oTarget, sEventType, fnHandler) {
if (oTarget.addEventListener) {
oTarget.addEventListener(sEventType, fnHandler, false);
} else if (oTarget.attachEvent) {
oTarget.attachEvent("on" + sEventType, fnHandler);
} else {
oTarget["on" + sEventType] = fnHandler;
}
};
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}
var Extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
}
var DateSelector = Class.create();
DateSelector.prototype = {
initialize: function(oYear, oMonth, oDay, options) {
this._Year = $(oYear);
this._Month = $(oMonth);
this._Day = $(oDay);
this.SetOptions(options);
var dt = new Date(), iYear = parseInt(this.options.Year), iMonth = parseInt(this.options.Month), iDay = parseInt(this.options.Day);
this.Year = iYear > 1900 ? iYear : dt.getFullYear() ;
this.Month = 1 <= iMonth && iMonth <= 12 ? iMonth : dt.getMonth() + 1;
this.Day = iDay > 0 ? iDay : dt.getDate();
this.MinYear = this.options.MinYear < this.Year && this.options.MinYear > 1900 ? this.options.MinYear : this.Year;
this.MaxYear = this.options.MaxYear > this.Year ? this.options.MaxYear : this.Year;
this.onDateChange = this.options.onDateChange;
//年设置
this.SetSelect(this._Year, this.MinYear, this.MaxYear, this.Year - this.MinYear);
//月设置
this.SetSelect(this._Month, 1, 12, this.Month - 1);
//日设置
this.SetDay();
//日期改变事件
addEventHandler(this._Year, "change", Bind(this, function(){
this.Year = this._Year.value; this.SetDay(); this.onDateChange();
}));
addEventHandler(this._Month, "change", Bind(this, function(){
this.Month = this._Month.value; this.SetDay(); this.onDateChange();
}));
addEventHandler(this._Day, "change", Bind(this, function(){
this.Day = this._Day.value; this.onDateChange();
}));
},
//设置默认属性
SetOptions: function(options) {
this.options = {//默认值
Year: 0,//年
Month: 0,//月
Day: 0,//日
MinYear: 0,//最小年份
MaxYear: 0,//最大年份
onDateChange: function(){}//日期改变时执行
};
Extend(this.options, options || {});
},
//日设置
SetDay: function() {
//这里技巧地取得月份天数
var daysInMonth = new Date(this.Year, this.Month, 0).getDate();
if (this.Day > daysInMonth) { this.Day = daysInMonth; };
this.SetSelect(this._Day, 1, daysInMonth, this.Day - 1);
},
//select设置
SetSelect: function(oSelect, iMin, iMax, iIndex) {
oSelect.options.length = 0;
for (var i = iMin; i <= iMax; i++) {
var op = document.createElement("OPTION"); op.value = i; op.innerHTML = i;
oSelect.appendChild(op);
}
//ie6的问题
setTimeout(function(){ oSelect.selectedIndex = iIndex; }, 0);
}
};
其中技巧在这里:
var daysInMonth = new Date(this.Year, this.Month, 0).getDate();
设置日参数为0,获取上一个月的最后一日,也就是上一个月的天数。
js日期下拉选择器完整实例源码下载:
远程下载:dateselsect.rar(1.56 KB)
asp之家下载:DateSelector.rar (1.56 KB)
0
投稿
猜你喜欢
- 当用户访问一个网站的时候,第一屏的信息展示是非常重要的,很大程度上影响了用户是否决定停留,然而光靠文字大面积的堆积,很难直观而迅速的告诉用户
- YSlow是yahoo美国开发的一个页面评分插件,非常的棒,从中我们可以看出我们页面上的很多不足,并且可以知道我们改怎么却改进和优化。仔细研
- DEMO:var testobj = document.getElementById("test&q
- 这次我们来说一些很小的东西,相当小。不过先说一个故事:这天晚上,你打算出去下一次馆子,就行动了,找到了一家新开的小店进去坐了下来,服务员很殷
- 在服务器端asp程序可以接受html页面上的form传来的参数,那么它又如何实现IE地址参数判断呢?当地址栏没有参数"id"时
- 上一篇的DOCTYPE声明好以后,接下来的代码是:<html xmlns="xhtml" ta
- 这个仿msn的右下角popup提示窗口效果很久以前收集的,现在整理出来给大家分享,需要的朋友可以拿去用,特点,提示窗口内容和js代码分离容易
- 代码如下:<form action="insert.asp" method="pos
- asp替换函数如下:Function ReplaceNoIgnoreCase(str,replStr) &n
- 具体代码和说明如下:upload.asp<form action=http://<%= Request.&n
- 我用 ip=Request.ServerVariables ("
- 作者:Jim Ley(主页)译者:Sheneyan(子乌)时间:2006.1.29英文原文:http://jibbering.com/200
- 如何做一个检索结果带链接的检索?具体代码和说明如下:<% data=request.form("search_da
- 本文介绍了两个asp实用的技巧,一是使用asp强制刷新页面,二是判断一个文件是否存在强制刷新网页 强制性刷新随机验证码 ,让随机验
- 最近重新温习了一次《javascript设计模式》,确实是一本好书,每次看都有不同的领悟,每次领悟到的都受益匪浅,无怪古圣人都说学无止镜了,
- 匹配中文字符的正则表达式: [\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]应用:计算字符串的长度(一
- 一个不错的js星级评分代码,可以评多个指标。相关文章推荐:用css制作星级投票评分功能 效果图:<script language=&q
- 注册模块default.asp 代码如下:<!DOCTYPE html PUBLIC "-//
- 最近一直在“深山老林”中修炼“支付宝新版收银台”,经历了白板设计,视觉设计,前端开发,前后端联调各个阶段。点点滴滴……重点谈谈对交互设计的感
- 第一列按照goodsid局部分组,然后在分组后的记录中按照audittime升序排序得到序号,从而显示某商品得第几次变迁。 第二列是取该商品