javascript实现日期三级联动下拉框选择菜单


Posted in Javascript onDecember 03, 2020

由于工作中涉及到生日编辑资料编辑,年月日用上面网址案例:bug提示:

编辑生日栏的【年】或者【月】,之前保存的具体的【日】就不显示啦,产品说不管编辑哪个数据,其他数据不变;

然后自己改了一下代码:

<html>

<head>
 <meta charset="UTF-8"/>
 <meta name="viewport"
   content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
 <title>JS年月日三级联动下拉框日期选择代码</title>
</head>

<body>

<form name="reg_testdate">
 <select name="YYYY" onChange="YYYYDD(this.value)">
  <option value="">请选择 年</option>
 </select>
 <select name="MM" onChange="MMDD(this.value)">
  <option value="">选择 月</option>
 </select>
 <select name="DD" onChange="DDD(this.value)">
  <option value="">选择 日</option>
 </select>
</form>

<script language="JavaScript">
 var changeDD = 1;//->一个全局变量
 function YYYYMMDDstart() {
  MonHead = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  //先给年下拉框赋内容
  var y = new Date().getFullYear();
  for (var i = (y - 47); i < (y + 21); i++) //以今年为准,前30年,后30年
   document.reg_testdate.YYYY.options.add(new Option(" " + i + " 年", i));
  //赋月份的下拉框
  for (var i = 1; i < 13; i++)
   document.reg_testdate.MM.options.add(new Option(" " + i + " 月", i));
  document.reg_testdate.YYYY.value = y;
  document.reg_testdate.MM.value = new Date().getMonth() + 1;
  var n = MonHead[new Date().getMonth()];
  if (new Date().getMonth() == 1 && IsPinYear(YYYYvalue)) n++;
  writeDay(n); //赋日期下拉框
  //->赋值给日,为当天日期
//  document.reg_testdate.DD.value = new Date().getDate();
 }
 if (document.attachEvent)
  window.attachEvent("onload", YYYYMMDDstart);
 else
  window.addEventListener('load', YYYYMMDDstart, false);

 function YYYYDD(str) //年发生变化时日期发生变化(主要是判断闰平年)
 {
  var MMvalue = document.reg_testdate.MM.options[document.reg_testdate.MM.selectedIndex].value;
  if (MMvalue == "") {
//   var e = document.reg_testdate.DD;
   optionsClear(e);
   return;
  }
  var n = MonHead[MMvalue - 1];
  if (MMvalue == 2 && IsPinYear(str)) n++;
  writeDay(n)
 }

 function MMDD(str) //月发生变化时日期联动
 {
  var YYYYvalue = document.reg_testdate.YYYY.options[document.reg_testdate.YYYY.selectedIndex].value;
  if (YYYYvalue == "") {
   var e = document.reg_testdate.DD;
   optionsClear(e);
   return;
  }
  var n = MonHead[str - 1];
  if (str == 2 && IsPinYear(YYYYvalue)) n++;
  writeDay(n)
 }

 function writeDay(n) //据条件写日期的下拉框
 {
  var e = document.reg_testdate.DD;
  optionsClear(e);
  for (var i = 1; i < (n + 1); i++)
  {
   e.options.add(new Option(" " + i + " 日", i));
   if(i == changeDD){
    e.options[i].selected = true; //->保持选中状态
   }
  }
  console.log(i);
  console.log(changeDD);
 }

 function IsPinYear(year) //判断是否闰平年
 {
  return (0 == year % 4 && (year % 100 != 0 || year % 400 == 0));
 }

 function optionsClear(e) {
  e.options.length = 1;
 }
 //->随时监听日的改变
 function DDD(str){
  changeDD = str;
 }
</script>
</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
权威JavaScript 中的内存泄露模式
Aug 13 Javascript
Javascript模块模式分析
May 16 Javascript
JavaScript对象创建及继承原理实例解剖
Feb 28 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
屏蔽script注入小例子
Nov 12 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
jQuery查看选中对象HTML代码的方法
Jun 17 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
jQuery与JavaScript节点创建方法的对比
Nov 18 Javascript
Bootstrap输入框组件使用详解
Jun 09 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
Jan 08 jQuery
HTML+JS实现在线朗读器
Feb 15 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 #jQuery
微信小程序实战之自定义模态弹窗(8)
Apr 18 #Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
Apr 18 #Javascript
JavaScript错误处理和堆栈追踪详解
Apr 18 #Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
Apr 18 #Javascript
微信小程序实战之自定义抽屉菜单(7)
Apr 18 #Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
Apr 18 #Javascript
You might like
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
javascript 解析url的search方法
2010/02/09 Javascript
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
详解vue axios二次封装
2018/07/22 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
jquery+ajax实现异步上传文件显示进度条
2020/08/17 jQuery
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
Python的垃圾回收机制深入分析
2014/07/16 Python
python实现挑选出来100以内的质数
2015/03/24 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
Python pymongo模块常用操作分析
2018/09/01 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
用 python 进行微信好友信息分析
2020/11/28 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
《鸟岛》教学反思
2014/04/26 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript