纯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 相关文章推荐
Prototype1.5 rc2版指南最后一篇之Position
Jan 10 Javascript
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
Sep 19 Javascript
jquery tab标签页的制作
May 10 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
Apr 12 Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
Jun 17 Javascript
详解vue.js之绑定class和style的示例代码
Aug 24 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
基于VUE的v-charts的曲线显示功能
Oct 01 Javascript
JS window对象简单操作完整示例
Jan 14 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 常见郁闷问题答解
2006/11/25 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
Python控制多进程与多线程并发数总结
2016/10/26 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
python树的同构学习笔记
2019/09/14 Python
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
JNI的定义
2012/11/25 面试题
线程同步的方法
2016/11/23 面试题
车间组长岗位职责
2013/12/20 职场文书
信息总监管理职责范本
2014/03/08 职场文书
服务标语大全
2014/06/18 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
捐助倡议书
2015/01/19 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
农业项目合作意向书
2015/05/08 职场文书
观后感开头
2015/06/19 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
JS的深浅复制详细
2021/10/16 Javascript