根据另一个下拉列表更改下拉列表

时间:2014-08-20 21:50:01

标签: jquery

我正在尝试创建一个代表一个人生日的三个选择下拉列表。我考虑到有4个月30天,7个有31个,1个有28个或29个,这取决于它是否是闰年。我希望天数下拉菜单显示天数,具体取决于月份下拉菜单中选择的月份。这就是我现在所拥有的。

这是选择

的html
<!Doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Birthday validation</title>
<script src="jquery-1.11.1.min.js"></script>
<script src="birthday_drop.js"></script>

<link href="style.css" rel="stylesheet />
</head>
<body>
<h2>Birthday</h2>
<fieldset class="birthday-picker">
<select class="birth-month" name="birth[month]"><option>Month</option></select>
<select class="birth-day" name="birth[day]"><option>Day</option></select>
<select class="birth-year" name="birth[year]"><option>Year</option></select>
</fieldset>
</body>
</html>

这是填充下拉列表和我尝试使用更改函数的jquery

/**
* Created by Eric Evans on 8/19/14.
*/

$(document).ready(function(){
var months =      ['January','February','March','April','May','June','July','August','September','October','November','December'];

for(i=0; i < months.length; i++){
    $("<option value=' + months[i] + '>" + months[i] + "</option>").appendTo('.birth-month');

}
for(i=0; i <= 31; i++){
    $("<option value=' + i + '>" + i + "</option>").appendTo('.birth-day');
}

var myYear = new Date().getFullYear();
for(i=myYear; i >= 1950; i--){
    $("<option value=' + i + '>" + i + "</option>").appendTo('.birth-year');
}

$('.birth-month').change(function(){
   if($(this).val() == 'April'){
       for(i=0; i <= 30; i++){
           $("<option value=' + i + '>" + i + "</option>").appendTo('.birth-day');
       }
   }
});

});

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

我真的会考虑使用jQuery datepicker之类的东西,只需打开changeYear和changeMonth功能......但无论如何,你可以做这样的事情(缺点是如果你先改变一天,当你选择一个月或一年时,它会删除它,虽然我想你可以存储当天的变量,如果该值存在于该月,则将其重置为该值): p>

function UpdateDays(){
    var cYear = $('select.birth-year').val();
    if(cYear != "Year"){
        var cMonth = $('.birth-month').val();
        if(cMonth != "Month"){
            $('.birth-day').html("<option>Day</option>");
            for(i=1; i <= new Date(cYear,cMonth,0).getDate(); i++){
                $("<option value=' + i + '>" + i + "</option>").appendTo('.birth-day');
            }
        }
    }
}
$('.birth-month,birth-year').change(function(){
    UpdateDays();
});

你首先必须纠正+ i +值问题(你指定“+ i +”作为值,而不是首先结束开头引号'“+ i +”'),那么你要么必须将月份值变量更改为数字,或使用数组查找月份的数字(因此您可以将其传递给Date()方法)。

如果您想查看它,这一切都在这里工作:http://jsfiddle.net/fuczrg03/2/

答案 1 :(得分:0)

你应该可以使用Date对象

来做到这一点

要获取给定年份和月份的天数,您可以使用以下代码

var startMonth = new Date(year, month, 1);
var endMonth = new Date(year, month + 1, 1);
var daysInGivenMonth = (endMonth - startMonth) / (1000 * 60 * 60 * 24)

现在,特定年份的月份天数将分配给daysInGivenMonth。您可以使用从1到&lt; = daysInGivenMonth的for循环,并填充您的日期下拉。