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 相关文章推荐
为指定元素增加样式的js代码
Dec 09 Javascript
复制js对象方法(详解)
Jul 08 Javascript
JS选项卡动态替换banner图片路径的方法
May 11 Javascript
浅析node连接数据库(express+mysql)
Nov 30 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
Mar 01 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
详解从Vue-router到html5的pushState
Jul 21 Javascript
如何把vuejs打包出来的文件整合到springboot里
Jul 26 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
Oct 24 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
Nov 07 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 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新手上路(七)
2006/10/09 PHP
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
python list语法学习(带例子)
2013/11/01 Python
python解析中国天气网的天气数据
2014/03/21 Python
python求列表交集的方法汇总
2014/11/10 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
建筑项目策划书
2014/01/13 职场文书
请假条的格式
2014/04/11 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python