我正在尝试构建3个选项,当您设置月份选择时,日期选择中的日期将根据月份而变化
HTML:
<select id="Day" name="Day">
</select>
<select id="Month" name="Month" onchange="monthSelected()">
</select>
<select id="Year" name="Year">
</select>
和页面加载:
<body onload ="addDate()">
脚本:
onDate():
function addDate() {
addMonth();
addYear();
addDay(1);
} //addDate
添加功能:
function addYear() {
var currentYear = new Date().getFullYear();
var legalWorkingAge = currentYear - 16;
var select = document.getElementById("Year");
for (var i = legalWorkingAge; i >= 1900; i--) {
var option = document.createElement('option');
option.text = option.value = i;
select.add(option, 0);
}//for
} //addYear
function addMonth() {
var select = document.getElementById("Month");
for (var i = 1; i <= 12; i++) {
var option = document.createElement('option');
option.text = option.value = i;
select.add(option, 0);
} //for
} //addMonth
function addDay(month) {
var select = document.getElementById("Day");
for (var i = 0; i < select.options.length; i++) {
select.options[i] = null;
}
var daynum;
switch (month) {
case 1: daynum = 31;
break;
case 2: daynum = 28;
break;
case 3: daynum = 31;
break;
case 4: daynum = 30;
break;
case 5: daynum = 31;
break;
case 6: daynum = 30;
break;
case 7: daynum = 31;
break;
case 8: daynum = 31;
break;
case 9: daynum = 30;
break;
case 10: daynum = 31;
break;
case 11: daynum = 30;
break;
case 12: daynum = 31;
break;
}//switch
for (var i = 1; i <= daynum; i++) {
var option = document.createElement('option');
option.text = option.value = i;
select.add(option, 0);
} //for
} //addDay
monthSelceted函数(当您更改select&#34; Month&#34;)时:
function monthSelected() {
var month = document.getElementById("Month");
var selectedMonth = month.options[month.selectedIndex].value;
addDay(selectedMonth);
}
这是它的作用:http://jsfiddle.net/pMUY3/6/ 我不知道为什么
我该如何解决? Tnx的帮助:D
答案 0 :(得分:1)
这里有两件事是错误的
在switch语句之前,将month
转换为类似
month = parseInt(month);
删除选项后,请不要增加i
,因为当您删除i
选项时,下一个选项会向下移动并跳过,当您增加{{1}时}}。而是删除选项0,直到数组为空。你可以这样做:
for(var i = 0; select.options.length&gt; 0;){ select.options [i] = null; }
答案 1 :(得分:0)
此代码中存在一些错误。
首先,for
开头的addDay
循环不会删除所有选项。当你删除一个选项时,它会将选项数组的长度减少一个,同时将计数器i
递增1,因此它会跳过其他所有选项。这会导致您看到的行为,每次选择一个月,每隔一天从日期列表中删除。
通过执行以下操作而不是for
循环来解决此问题:
while (select.options.length > 0) {
select.options[0] = null;
}
其次,您的switch
语句从未输入,因此daynum
始终为undefined
,因此不会添加任何新选项。它没有输入,因为month
是一个字符串,而案例都是数字。通过使用month
:
parseInt
更改为整数,可以轻松解决此问题
switch (parseInt(month)) {
答案 2 :(得分:0)
您需要将addDay更改为:
function addDay(month) {
/***** cast is needed to matching month value with you case statements ******/
month = parseInt(month);
/***** cast is needed to matching month value with you case statements ******/
var select = document.getElementById("Day");
/*********** for statement needs to replace with this ***********/
while (select.options.length != 0)
{
select.options.remove(0);
}
/*********** for statement needs to replace with this ***********/
var daynum;
switch (month) {
case 1: daynum = 31;
break;
case 2: daynum = 28;
break;
case 3: daynum = 31;
break;
case 4: daynum = 30;
break;
case 5: daynum = 31;
break;
case 6: daynum = 30;
break;
case 7: daynum = 31;
break;
case 8: daynum = 31;
break;
case 9: daynum = 30;
break;
case 10: daynum = 31;
break;
case 11: daynum = 30;
break;
case 12: daynum = 31;
break;
}//switch
for (var i = 1; i <= daynum; i++) {
var option = document.createElement('option');
option.text = option.value = i;
select.add(option, 0);
} //for
} //addDay