• JS年月日三级联动下拉框日期选择代码


    原博客网址:

    http://www.cnblogs.com/gdcgy/p/5467742.html

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

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

    然后自己改了一下代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <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>
  • 相关阅读:
    【网络流24题】魔术球问题(最小不相交路径覆盖)
    【网络流24题】搭配飞行员(太空飞行计划问题)(最大闭合图)
    【网络流24题】搭配飞行员(飞行员配对方案问题)(网络流)
    bzoj 1664 (贪心)
    关于正方形类问题
    就代码格式化问题
    提高组2017游记
    线程同步
    线程的优先级
    线程的常用方法
  • 原文地址:https://www.cnblogs.com/kpengfang/p/6726981.html
Copyright © 2020-2023  润新知