时间:2014-01-29 来源:

一个日期下拉菜单的js实现代码

1.先看效果图:

2.js代码
year_month_day.js
复制代码 代码如下:

year_month_day.js
function DateSelector(selYear, selDay) {
this.selYear = selYear;
this.selMonth = selMonth;
this.selDay = selDay;
this.selYear.Group = this;
this.selMonth.Group = this;
// 给年份、月份下拉菜单添加处理onchange事件的函数
if (window.document.all != null) // IE
{
this.selYear.attachEvent("onchange", DateSelector.Onchange);
}
else // Firefox
{
this.selYear.addEventListener("change", false);
this.selMonth.addEventListener("change", false);
}
if (arguments.length == 4) // 如果传入参数个数为4, arguments[3].getMonth() + 1,最后三个参数必须为初始的年月日数值
this.InitSelector(arguments[3], arguments[5]);
else // 默认使用当前日期
{
var dt = new Date();
this.InitSelector(dt.getFullYear(), dt.getDate());
}
}
// 增加一个最大年份的属性
DateSelector.prototype.MinYear = 1900;
// 增加一个最大年份的属性
DateSelector.prototype.MaxYear = (new Date()).getFullYear();
// 初始化年份
DateSelector.prototype.InitYearSelect = function () {
// 循环添加OPION元素到年份select对象中
for (var i = this.MaxYear; i >= this.MinYear; i--) {
// 新建一个OPTION对象
var op = window.document.createElement("OPTION");
// 设置OPTION对象的值
op.value = i;
// 设置OPTION对象的内容
op.innerHTML = i;
// 添加到年份select对象
this.selYear.appendChild(op);
}
}
// 初始化月份
DateSelector.prototype.InitMonthSelect = function () {
// 循环添加OPION元素到月份select对象中
for (var i = 1; i < 13; i++) {
// 新建一个OPTION对象
var op = window.document.createElement("OPTION");
// 设置OPTION对象的值
op.value = i;
// 设置OPTION对象的内容
op.innerHTML = i;
// 添加到月份select对象
this.selMonth.appendChild(op);
}
}
// 根据年份与月份获取当月的天数
DateSelector.DaysInMonth = function (year, month, month);
// 清空原有的选项
this.selDay.options.length = 0;
// 循环添加OPION元素到天数select对象中
for (var i = 1; i <= daysInMonth; i++) {
// 新建一个OPTION对象
var op = window.document.createElement("OPTION");
// 设置OPTION对象的值
op.value = i;
// 设置OPTION对象的内容
op.innerHTML = i;
// 添加到天数select对象
this.selDay.appendChild(op);
}
}
// 处理年份和月份onchange事件的方法div+css+js切图,它获取事件来源对象(即selYear或selMonth)
// 并调用它的Group对象(即DateSelector实例,网页重构报价请见构造函数)提供的InitDaySelect方法重新初始化天数
// 参数e为event对象
DateSelector.Onchange = function (e) {
var selector = window.document.all != null ? e.srcElement : e.target;
selector.Group.InitDaySelect();
}
// 根据参数初始化下拉菜单选项
DateSelector.prototype.InitSelector = function (year, day) {
// 由于外部是可以调用这个方法psd切图html,因此我们在这里也要将selYear和selMonth的选项清空掉
// 另外因为InitDaySelect方法已经有清空天数下拉菜单,手机div+css因此这里就不用重复工作了
this.selYear.options.length = 0;
this.selMonth.options.length = 0;
// 初始化年、月
this.InitYearSelect();
this.InitMonthSelect();
// 设置年、月初始值
this.selYear.selectedIndex = this.MaxYear - year;
this.selMonth.selectedIndex = month - 1;
// 初始化天数
this.InitDaySelect();
// 设置天数初始值
this.selDay.selectedIndex = day - 1;
}

3.HTML代码
year_month_day.htm
复制代码 代码如下:

year_month_day.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>如何实现一个日期下拉菜单</title>
<script type="text/javascript" src="year_month_day.js"></script>
</head>
<body>
<select id="selYear"></select>
<select id="selMonth"></select>
<select id="selDay"></select>
<script type="text/javascript">
var selYear = window.document.getElementById("selYear");
var selMonth = window.document.getElementById("selMonth");
var selDay = window.document.getElementById("selDay");
// 新建一个DateSelector类的实例web外包, selMonth, 2004, 29);
// 也可以试试下边的代码
// var dt = new Date(2004, 29);
// new DateSelector(selYear,selDay, selMonth, DateSelector.Onchange); this.selMonth.attachEvent("onchange", DateSelector.Onchange, DateSelector.Onchange,最后一个参数必须为Date对象 this.InitSelector(arguments[3].getFullYear(), arguments[3].getDate()); else if (arguments.length == 6) // 如果传入参数个数为6, arguments[4], dt.getMonth() + 1, month) { var date = new Date(year, 0); return date.getDate(); } // 初始化天数 DateSelector.prototype.InitDaySelect = function () { // 使用parseInt函数获取当前的年份和月份 var year = parseInt(this.selYear.value); var month = parseInt(this.selMonth.value); // 获取当月的天数 var daysInMonth = DateSelector.DaysInMonth(year, month); // 清空原有的选项 this.selDay.options.length = 0; // 循环添加OPION元素到天数select对象中 for (var i = 1; i <= daysInMonth; i++) { // 新建一个OPTION对象 var op = window.document.createElement("OPTION"); // 设置OPTION对象的值 op.value = i; // 设置OPTION对象的内容 op.innerHTML = i; // 添加到天数select对象 this.selDay.appendChild(op); } } // 处理年份和月份onchange事件的方法,div切图排版它获取事件来源对象(即selYear或selMonth) // 并调用它的Group对象(即DateSelector实例网页切图制作, month, day) { // 由于外部是可以调用这个方法,div+css+js切图因此我们在这里也要将selYear和selMonth的选项清空掉 // 另外因为InitDaySelect方法已经有清空天数下拉菜单承接网站前端,因此这里就不用重复工作了 this.selYear.options.length = 0; this.selMonth.options.length = 0; // 初始化年、月 this.InitYearSelect(); this.InitMonthSelect(); // 设置年、月初始值 this.selYear.selectedIndex = this.MaxYear - year; this.selMonth.selectedIndex = month - 1; // 初始化天数 this.InitDaySelect(); // 设置天数初始值 this.selDay.selectedIndex = day - 1; }
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
点击次数:6260
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日《云计算架构技术与实践》连载(9)2.2.4单VM及多VM的弹性伸缩技术【综合】2014年12月18日项目里面常用的加密方式base64、AES、MD5、sha-1【互联网】2015年03月27日HashSet源码分析 【编程语言】2015年06月01日蓝天碧水中国梦-总览(3)-中国节能减排目标 【系统运维】2015年02月28日接口【编程语言】2015年07月14日Excel锁定单元格设置2014年01月28日Spring技术内幕:SpringAOP的实现原理(四) 【编程语言】2015年07月07日MFC中消息定义文件:afxmsg_.h【移动开发】2015年06月26日exc_badaccesscode=exc_1386_gpflt【Web前端】2015年08月30日leetCode73.SetMatrixZeroes(矩阵置0)解题思路和方法 【编程语言】2015年07月20日2D物理引擎--开坑篇 【编程语言】2015年05月18日Howtomcatworks读书笔记十五Digester库 【综合】2014年12月09日被final关键字坑了 【移动开发】2015年01月07日CLRS2.3c++实现 【编程语言】2014年12月29日Alcatraz在Xcode6.3.2版本不启动的解决 【移动开发】2015年06月24日段云峰:DB29对企业有3点帮助2014年01月29日hdu4689Derangement 【移动开发】2015年08月26日Pythonscikit-learn学习笔记—PCA+SVM人脸识别 【架构设计】2015年05月18日为什么会有函数模版 【移动开发】2015年07月03日Linux下的防火墙iptables 【综合】2014年11月04日进程间通信IPC--pipe 【编程语言】2015年07月14日第五十讲:Android之Nothfication(三)【移动开发】2014年11月24日奇葩的项目进度滞后 【编程语言】2015年06月05日Appium+Robotframework实现Android应用的自动化测试-7:模拟器频繁挂掉的解决方案【编程语言】2015年07月14日javascript节点排序实现代码2014年01月29日hihocoder1041国庆出游dfs 【移动开发】2014年11月04日Android应用源码航空订票软件客户端【云计算】2014年12月16日PowerPoint的几个快捷键2014年01月28日php循环语句for()与foreach()用法区别介绍2014年01月29日ACdreamOJ1153(k-GCD)【编程语言】2014年11月14日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)