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 相关文章推荐
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
简单的js分页脚本
May 21 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
Vue中fragment.js使用方法详解
Mar 09 Javascript
vue-ajax小封装实例
Sep 18 Javascript
js实现简单数字变动效果
Nov 06 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
vuejs router history 配置到iis的方法
Sep 20 Javascript
JSONP解决JS跨域问题的实现
May 25 Javascript
JS 5种遍历对象的方式
Jun 16 Javascript
Vue ECharts实现机舱座位选择展示功能
May 15 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
Python中的True,False条件判断实例分析
2015/01/12 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python 字典的打印实现
2019/09/26 Python
python科学计算之narray对象用法
2019/11/25 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
函数指针的定义是什么
2016/08/14 面试题
简历的自我评价
2014/02/03 职场文书
室内设计专业自荐信
2014/05/31 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
患者身份识别制度
2015/08/06 职场文书
大学体育课感想
2015/08/10 职场文书