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 相关文章推荐
prototype与jquery下Ajax实现的差别
Sep 13 Javascript
JavaScript中清空数组的三种方法分享
Apr 07 Javascript
如何在MVC应用程序中使用Jquery
Nov 17 Javascript
浅谈js中的闭包
Mar 16 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
聊聊JavaScript如何实现继承及特点
Apr 07 Javascript
Webpack devServer中的 proxy 实现跨域的解决
Jun 15 Javascript
Vue刷新修改页面中数据的方法
Sep 16 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
Node.js安装详细步骤教程(Windows版)详解
Sep 01 Javascript
vue a标签点击实现赋值方式
Sep 07 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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设置页面超时时间解决方法
2015/09/22 PHP
php格式化json函数示例代码
2016/05/12 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现二维码扫码自动登录淘宝
2016/12/27 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
对Django中内置的User模型实例详解
2019/08/16 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
2014年党员公开承诺践诺书
2014/03/25 职场文书
新书发布会策划方案
2014/06/09 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2015年导购员工作总结
2015/04/25 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL