[英]setting a select option by another select selected option
我正在嘗試建立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()">
劇本:
時間到了():
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函數(當您更改選擇“ Month”時):
function monthSelected() {
var month = document.getElementById("Month");
var selectedMonth = month.options[month.selectedIndex].value;
addDay(selectedMonth);
}
這是它的作用: http : //jsfiddle.net/pMUY3/6/我不知道為什么
我如何解決它? Tnx尋求幫助:D
這里有兩件事是錯誤的
在switch語句之前,將month
轉換為這樣的int
month = parseInt(month);
當您刪除選項時,請勿增加i
,因為當您刪除第i
個選項時,當您增加i
時,下一個選項將向下移動並被跳過。 而是刪除選項0,直到數組為空。 您可以這樣做:
for(var i = 0; select.options.length> 0;){select.options [i] = null; }
此代碼中有幾個錯誤。
首先,在addDay
開始時的for
循環不會刪除所有選項。 當您刪除一個選項時,它會將選項數組的長度減少一,同時將計數器i
增加一,因此它會跳過其他所有選項。 這將導致您看到的行為,即每月選擇一次,每隔一天從日列表中刪除。
通過執行以下操作而不是執行for
循環來解決此問題:
while (select.options.length > 0) {
select.options[0] = null;
}
其次,永遠不會輸入switch
語句,因此daynum
始終是undefined
,因此永遠不會添加任何新選項。 由於month
是字符串,而案件是全數字,因此未輸入。 通過使用parseInt
將month
更改為整數,可以輕松解決此問題:
switch (parseInt(month)) {
您需要將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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.