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 link方法入门实例(给字符串加上超链接)
Oct 17 Javascript
详解JavaScript中的forEach()方法的使用
Jun 08 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
Sep 20 Javascript
jquery实现拖动效果
Aug 10 Javascript
JS原型与原型链的深入理解
Feb 15 Javascript
js实现移动端导航点击自动滑动效果
Jul 18 Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
JS实现仿微信支付弹窗功能
Jun 25 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 Javascript
JavaScript利用键盘码控制div移动
Mar 19 Javascript
vue 实现上传组件
May 31 Vue.js
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 CLI实现简单的数据库实时监控调度
2009/07/01 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
php中namespace use用法实例分析
2016/01/22 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
简单的三步vuex入门
2018/05/20 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
Python实现的简单万年历例子分享
2014/04/25 Python
Python3处理文件中每个词的方法
2015/05/22 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
python flask实现分页的示例代码
2018/08/02 Python
Python数据可视化之画图
2019/01/15 Python
python如何设置静态变量
2020/09/07 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
房屋所有权证明
2014/10/20 职场文书
学生个人评语大全
2015/01/04 职场文书
八年级作文之感恩
2019/11/22 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
浅谈Python协程asyncio
2021/06/20 Python
在Docker容器中部署SQL Server
2022/04/11 Servers