javascript年月日三级联动下拉框

看了好几篇 js 年月日三级联动下拉框,没看到一个好的,不是太繁琐,就是太猥琐。还有就是闲得慌。

有这样的:

function (){
    return Array(
        [1...28],
        [1...30],
        [1...31]
    )
}

简直了,这是要有多闲。
还有的写的很复杂,这很简单的东西,搞得那么复杂给谁看。我看半天愣是没看懂。

这是我写的一个年月日三级联动下拉框。

<!DOCTYPE html>
<html lang="en">
    <body>
        <select id="y" onchange="funy(this)"></select>
        <select id="m" onchange="funm(this)"></select>
        <select id="d"></select>
    </body>
    <script>
        /*
            在你的页面需要这三条html代码
            <select id="y" onchange="funy(this)"></select>
            <select id="m" onchange="funm(this)"></select>
            <select id="d"></select>
        */
        var y = document.getElementById('y');
        var m = document.getElementById('m');
        var d = document.getElementById('d');

        var D = new Date();
        var yy = D.getFullYear();               //年
        var mm = parseInt(D.getMonth()) + 1;    //现在是8月,月份获取是7月。一脸懵逼!
        var dd = D.getDate();                   //日
        var oyy = 10 * (yy - 100).toString().substr(0,3);   //计算最小年 o = old
        var marr = [1,3,5,7,8,10,12];           //列出31天的月份
        var add;                                //初始化每月天数 a = all

        starty();           //开始生成年下拉列表
        startm();           //开始生成月下拉列表
        startd(dd,mm,yy);   //开始生成日下拉列表

        // 生成年下拉列表
        function starty(){
            // 初始化
            var pyy = document.createElement('option');
            pyy.innerText = '选择 年';
            pyy.value = 0;
            y.appendChild(pyy);

            // 循环出所有年
            for(i=yy;i>=oyy;i--){
                pyy = document.createElement('option');
                pyy.innerText = i + ' 年';
                pyy.value = i;
                y.appendChild(pyy);
            }
        }

        // 生成月下拉列表
        function startm(){
            // 初始化
            var pmm = document.createElement('option');
            pmm.innerText = '选择 月';
            pmm.value = 0;
            m.appendChild(pmm);

            // 判断是否选择了年
            if(y.selectedOptions[0].value == 0) return;

            // 循环出所有月
            for(i=1;i<=12;i++){
                pmm = document.createElement('option');
                pmm.innerText = i + ' 月';
                pmm.value = i;
                m.appendChild(pmm);
            }
        }

        function startd(mm,yy){
            // 初始化
            var pdd = document.createElement('option');
            pdd.innerText = '选择 日';
            pdd.value = 0;
            d.appendChild(pdd);

            // 判断是否选择了月
            if(m.selectedOptions[0].value == 0) return;
            var day = isadd(mm,yy);

            // 循环出所有日
            for(i=1;i<=day;i++){
                pdd = document.createElement('option');
                pdd.innerText = i + ' 日';
                pdd.value = i;
                d.appendChild(pdd);
            }
        }

        // 判断并产生该月的天数
        function isadd(mm,yy){
            if(marr.indexOf(parseInt(mm)) != -1){
                add = 31;
            }
            else{
                add = 30;
                if(mm == 2 && yy % 4 == 0){
                    add = 29;
                }
                else if(mm == 2 && yy % 4 != 0){
                    add = 28;
                }
            }
            return add;
        }

        // 年份改变时调用
        function funy(obj){
            m.innerHTML = null;
            d.innerHTML = null;
            var yy = obj.selectedOptions[0].value;
            startm();
            startd(dd,mm,yy);
        }

        // 月份改变时调用
        function funm(obj){
            d.innerHTML = null;
            var yy = y.selectedOptions[0].value;
            var mm = obj.selectedOptions[0].value;
            startd(mm,yy);
        }
    </script>
</html>

[2017年8月14日23:09:03] 删去部分无用代码

<HTML> <HEAD> <title>年月日三联下拉框</title> <meta http-equiv='Content-Type' content='text/html; charset=gb2312'> <meta name='author' content='http://singlepine.cnblogs.com/'> </HEAD> <body> <form name="form1"> 请选择 年 选择 月 选择 日 </form> [removed]<!-- function YYYYMMDDstart() { MonHead = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; //先给年下拉框赋内容 var y = new Date().getFullYear(); for (var i = (y-30); i < (y+30); i++) //以今年为准,前30年,后30年 document.form1.YYYY.options.add(new Option(" "+ i +" 年", i)); //赋月份的下拉框 for (var i = 1; i < 13; i++) document.form1.MM.options.add(new Option(" " + i + " 月", i)); document.form1.YYYY.value = y; document.form1.MM.value = new Date().getMonth() + 1; var n = MonHead[new Date().getMonth()]; if (new Date().getMonth() ==1 && IsPinYear(YYYYvalue)) n++; writeDay(n); //赋日期下拉框 document.form1.DD.value = new Date().getDate(); } if(document.attachEvent) window.attachEvent("onload", YYYYMMDDstart); else window.addEventListener('load', YYYYMMDDstart, false); function YYYYDD(str) //年发生变化时日期发生变化(主要是判断闰平年) { var MMvalue = document.form1.MM.options[document.form1.MM.selectedIndex].value; if (MMvalue == ""){ var e = document.form1.DD; optionsClear(e); return;} var n = MonHead[MMvalue - 1]; if (MMvalue ==2 && IsPinYear(str)) n++; writeDay(n) } function MMDD(str) //月发生变化时日期联动 { var YYYYvalue = document.form1.YYYY.options[document.form1.YYYY.selectedIndex].value; if (YYYYvalue == ""){ var e = document.form1.DD; optionsClear(e); return;} var n = MonHead[str - 1]; if (str ==2 && IsPinYear(YYYYvalue)) n++; writeDay(n) } function writeDay(n) //据条件写日期的下拉框 { var e = document.form1.DD; optionsClear(e); for (var i=1; i<(n+1); i++) e.options.add(new Option(" "+ i + " 日", i)); } function IsPinYear(year)//判断是否闰平年 { return(0 == year%4 && (year0 !=0 || year@0 == 0)); } function optionsClear(e) { e.options.length = 1; } //--> [removed] </body> </HTML>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值