JS实现年月日三级联动

这里写图片描述

所谓联动就是本身的改变受上下级元素影响,常见的多级联动运用在选择年月日,选择国家地区,购物筛选等等,本案例实现的是年月日的三级联动,原生js实现,效果如上图。

大多说多级联动数据都是来自后台数据库的多维数组或者本地数据表,道理大同小异,无外乎js判断上下级关系,获取子父索引关系。本例的年月日也是如此。

年和月好解决,不受谁影响,主要是每月天数受年月影响,闰年2月29天,平年29。1、3、5、7、8、10、12月31,4、6、9、11月30天,在下拉列表显示日之前先判断年月。

好,大体思路如此,看看主要代码:


 <form name=form1>
        <select name=YYYY onchange="YYYYMM(this.value)">
            <option value=""></option>
        </select>
        <select name=MM onchange="MMDD(this.value)">
            <option value=""></option>
        </select>
        <select name=DD>
            <option value=""></option>
        </select>
        <span class="H"></span>
    </form>

重点的地方都有注释

           //定义每月最后一天数组
            LastDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

            //年下拉框赋内容
            var y = new Date().getFullYear();
            var str = strYYYY.substring(0, strYYYY.length - 9);
            for (var i = (y - 30); i < (y + 30); i++) //以今年为准,前30年,后30年
            {
                str += "<option value='" + i + "'> " + i + "</option>\r\n";
            }
            document.form1.YYYY.outerHTML = str + "</select>";
            document.form1.YYYY.value = y;

            //赋月份的下拉框

            //赋日期下拉框


        function YYYYMM(str) //年发生变化时日期发生变化(主要是判断闰平年)
        {
            var MMvalue = document.form1.MM.options[document.form1.MM.selectedIndex].value;
            var n = LastDay[MMvalue - 1];
            if (MMvalue == 2 && IsRun(str)) n++;
            writeDay(n)
        }

        function MMDD(str) //月发生变化时日期联动
        {
            var YYYYvalue = document.form1.YYYY.options[document.form1.YYYY.selectedIndex].value;
            var n = LastDay[str - 1];
            if (str == 2 && IsRun(YYYYvalue)) n++;
            writeDay(n)
        }

        function writeDay(n) //据条件写日期的下拉框
        {
            var s = strDD.substring(0, strDD.length - 9);
            for (var i = 1; i < (n + 1); i++)
                s += "<option value='" + i + "'> " + i + "</option>\r\n";
            document.form1.DD.outerHTML = s + "</select>";
        }

        function IsRun(year) //判断是否闰平年
        {
            return (0 == year % 4 && (year % 100 != 0 || year % 400 == 0))
        }

最后,感谢阅读,细节代码移步GitHub

转载于:https://www.cnblogs.com/zhenfei666/p/9357162.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值