纯JS实现出生日期[年月日]下拉菜单效果


Posted in Javascript onJune 01, 2018

在制作网页时,可能需要给用户提供注册帐号页面,用户注册 设计很多信息,其中就有 关于出生日期的,出于用户体验,不想让用户手动输入,而HTML5的date,目前很多浏览器支持的并不是很好,所以就可以用JS实现年、月、日3个下拉框的日期选择。具体代码如下:

1、新建一个js文件,如birthday.js;

function DateSelector(selYear, selMonth, 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);
    this.selMonth.attachEvent("onchange", DateSelector.Onchange);
  }
  else // Firefox
  {
    this.selYear.addEventListener("change", DateSelector.Onchange, false);
    this.selMonth.addEventListener("change", DateSelector.Onchange, false);
  }
  if (arguments.length == 4) // 如果传入参数个数为4,最后一个参数必须为Date对象
    this.InitSelector(arguments[3].getFullYear(), arguments[3].getMonth() + 1, arguments[3].getDate());
  else if (arguments.length == 6) // 如果传入参数个数为6,最后三个参数必须为初始的年月日数值
    this.InitSelector(arguments[3], arguments[4], arguments[5]);
  else // 默认使用当前日期
  {
    var dt = new Date();
    this.InitSelector(dt.getFullYear(), dt.getMonth() + 1, dt.getDate());
  }
}
// 增加一个最小年份的属性--最老年份
DateSelector.prototype.MinYear = 1960;
// 增加一个最大年份的属性--最新年份,即当前时期getFullYear()
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) {
  var date = new Date(year, month, 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事件的方法,它获取事件来源对象(即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, month, day) {
// 由于外部是可以调用这个方法,因此我们在这里也要将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;
}

2、在注册表单中的页面,引用刚才写的js

<script type="text/javascript" src="/js/birthday.js"></script>
<select id="selYear"></select>年
<select id="selMonth"></select>月
<select id="selDay"></select>日
<!--完成出生日期的选择--需写在</body>前-->
<script type="text/javascript">
var selYear = window.document.getElementById("selYear");
var selMonth = window.document.getElementById("selMonth");
var selDay = window.document.getElementById("selDay");
// 新建一个DateSelector类的实例,将三个select对象传进去
new DateSelector(selYear, selMonth, selDay, 1995, 1, 17);
</script>
</body>
</html>

总结

以上所述是小编给大家介绍的纯JS实现出生日期[年月日]下拉菜单效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery 学习第六课 实现一个Ajax的TreeView
May 17 Javascript
本地对象Array的原型扩展实现代码
Dec 04 Javascript
jQuery代码优化 选择符篇
Nov 01 Javascript
jquery实现图片裁剪思路及实现
Aug 16 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
JavaScript继承模式粗探
Jan 12 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
如何在基于vue-cli的项目自定义打包环境
Nov 10 Javascript
微信小程序点击保存图片到本机功能
Dec 13 Javascript
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
Ajax实现页面无刷新留言效果
Mar 24 Javascript
Angular CLI发布路径的配置项浅析
Mar 29 Javascript
详解Angular操作cookies方法
Jun 01 #Javascript
浅谈手写node可读流之流动模式
Jun 01 #Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
Jun 01 #Javascript
基于JS实现带动画效果的流程进度条
Jun 01 #Javascript
说说node中的可读流和可写流的区别
Jun 01 #Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 #Javascript
React 使用browserHistory项目访问404问题解决
Jun 01 #Javascript
You might like
PHP二维数组的去重问题解析
2011/07/17 PHP
浅谈php扩展imagick
2014/06/02 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
javascript 隔行换色函数代码
2010/10/24 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
itchat接口使用示例
2017/10/23 Python
代码分析Python地图坐标转换
2018/02/08 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
Python中的流程控制详解
2021/02/18 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
学生安全承诺书
2014/05/22 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
移除Selenium中window.navigator.webdriver值
2022/06/10 Python