jQuery如何向下拉菜单中添加选项?

4
我曾尝试过stackoverflow上其他问题的解决方案,但它们都无法满足我的需求。在一个表单中,我想根据用户选择的月份更新该月份的天数。 #DOBM是月份选择列表的ID(DOBM代表出生日期月份)
#DOBD是日期选择列表的ID(DOBD代表出生日期日)
基本上,如果#DOBM的值为01、03、05、07、08、10或12,则我们处于一个有31天的月份。
以下是我的代码:
if ((($('#DOBM').val() == '01'||'03'||'05'||'07'||'08'||'10'||'12'))
&& ($("#DOBD option[value='31']").length == 0)) {
    $("#DOBD").append("<option value='31'>31</option>");}

第二行代码是用来检查选项是否已经存在于日期选择列表中。 最后一行代码是在一个31天的月份且选项31不存在时添加新选项(第31天)。 但是该代码没有更新DOBD选择列表。你有什么想法,我做错了什么吗?
2个回答

8

你的 if 语句是错误的。你需要将 .val() 和每个值进行比较,像这样:

if($('#DOBM').val() == '01'||$('#DOBM').val() == '03'

编辑

你也可以使用switch语句:

$("#btn").on("click",function(){
    switch($("#DOBM").val())
    {
        case "01":
        case "03":
        case "05":
        case "07":
        case "08":
        $("#DOBD").append("<option value='31'>31</option>");
            break;
    }
});

JSFiddle: http://jsfiddle.net/dRJHh/

根据@sberry的建议,使用数组:

var vals = ['01','03', '05', '07', '08'];
$("#btn").on("click",function(){

    if(jQuery.inArray($("#DOBM").val(),vals) > -1)
    {
         $("#DOBD").append("<option value='31'>31</option>");
    }
});

jsFiddle: http://jsfiddle.net/yhcDa/


1
或者更好的方法是创建一个本地变量,并在所有比较中使用它,或者使用类似于inArray类型的函数。 - sberry

1
var month = $('#DOBM').val();    
if ((( month == '01')||(month =='03')||(month =='05')||(month =='07')||(month =='08')||(month =='10')||(month =='12')) && ($("#DOBD option[value='31']").length == 0)) 
 {
        $("#DOBD").append("<option value='31'>31</option>");
 }

或者你也可以这样做。
var month = $('#DOBM').val();
var arr = [ '01','03', '05','07', '08', '10', '12'];
if(($.inArray(month, arr) != -1) && ($("#DOBD option[value='31']").length == 0))
{
     $("#DOBD").append("<option value='31'>31</option>");
}

或者您可以直接检查每个月的天数

var month = $('#DOBM').val();
var year = 2013;
if((Date(year, month, 0).getDate() == 31) && ($("#DOBD option[value='31']").length == 0)) {
    $("#DOBD").append("<option value='31'>31</option>");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接