通过另一个选择选择选项设置选择选项

时间:2014-01-31 18:06:20

标签: javascript html

我正在尝试构建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

3 个答案:

答案 0 :(得分:1)

这里有两件事是错误的

  1. 在switch语句之前,将month转换为类似

    的int

    month = parseInt(month);

  2. 删除选项后,请不要增加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