簡體   English   中英

設置另一個選擇的選項

[英]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

這里有兩件事是錯誤的

  1. 在switch語句之前,將month轉換為這樣的int

    month = parseInt(month);

  2. 當您刪除選項時,請勿增加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是字符串,而案件是全數字,因此未輸入。 通過使用parseIntmonth更改為整數,可以輕松解決此問題:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM