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
投稿
猜你喜欢
- 它为什么是有用的? 作为一名JavaScript开发者,你可能经常发现自己处于代码覆盖可能有用的情景。例如:对测试套件的质量感兴趣? 重构一
- 很有创意的鼠标指针风筝,看起来非常有意思。在网络上看到的,一下也想不起来是那里的了,所以特别说一下图片是来自网络的,版权归作者所有。
- TensorFlow官网给的cifar-10教程,是卷积神经网络入门的好例子,有时想直接拿这个模型来跑自己的数据,却发现他的数据类型不是常见
- <?php $search = array ("'<script[^>]*?>.*?</sc
- 如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子:$unsafe_variable = $_
- <SCRIPT LANGUAGE="JavaScript"><!-- Beginfunction si
- 首先,建一个文件夹,把你要隐藏的文件放在里面,你的所有黑客程序什么的。假设你建的文件夹叫hacker然后呢,我们给这个文件夹加个扩展名(后缀
- 网上搜到的代码,千篇一律是这个 Function Sort(ary) Dim KeepChecking,I,FirstV
- 在使用ros的时候经常会用到rosbag来录制或者回放算法,是个非常有用的工具。rosbag 命令列表命令作用record录制一个包,并且指
- mysql存储引擎:MySQL服务器采用了模块化风格,各部分之间保持相对独立,尤其体现在存储架构上。存储引擎负责管理数据存储,以及MySQL
- Python中专门提供了telnetlib库,用来完成基于telnet协议的通信功能。python3下使用telnetlib模块连接网络设备
- 二叉树的反序列化反序列化树的反序列化故名知意就是将一个序列化成字符串或者其它形式的数据重新的生成一颗二叉树,如下这颗二叉树将它序列化成字符串
- 之前对bottle做过不少的介绍,也写过一些文章来说明bottle的缺点,最近发现其实之前有些地方说的不太公平,所以趁此机会也来更正一下。&
- 前言本文通过定时调度Python的例子演示了Apache DophinScheduler 的基本操作:创建租户指定用户的租户创建Python
- 不得不承认,傲游在用户体验方面是做得比较好的,所以它的用户群非常大。也正因为如此,它的某些不好的特性也造成了开发人员不可忽略的浏览器兼容问题
- 本文旨在挖掘表格在艺术创意方面的一些功能效果。运行代码框<script language="JavaScript"
- 本文实例讲述了python实现向ppt文件里插入新幻灯片页面的方法。分享给大家供大家参考。具体实现方法如下:# -*- coding: UT
- 前记在Python中, Dict是一系列由键和值配对组成的元素的集合, 它是一个可变容器模型,可以存储任意类型对象. Dict的存取速度非常
- 前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病。然而在IO密集型的网络编程里,异步处理比同步处理能提升
- 前言reinhard算法:Color Transfer between Images,作者Erik Reinhardwelsh算法:Tran