填充两个从JSON中选择

时间:2014-06-18 07:50:12

标签: javascript jquery json

这是我的JSON文件:

{
        "AL2": {
                "3810": "AL2GR1",
                "3814": "AL2GR2",
                "3815": "AL2GR3",
        },
        "AN3": {
                "3818": "AN3GR1",
                "3819": "AN3GR2"
        },
        "CME": {
                "2405": "CME"
}

我需要填充两个选择框。第一个让我们在第一级值(AL2,AN3,CME)和第二级值(AL2GR#,AN3GR#,CME)之间进行选择。

我的infile Javascript是:

var jsonData = {"AL2": {"3810": "AL2GR1","3814": "AL2GR2","3815": "AL2GR3"},"AN3": {"3818": "AN3GR1","3819": "AN3GR2"},"CME": {"2405": "CME"}};

$(window).load(function(){
  $.each(jsonData,function(key, value) {
    $('#ue').append('<option value=' + key + '>' + key + '</option>');
  });
});

function grfromue(element,jsonData) {
    var ue = $("#ue option:selected").text();
    alert(ue);
    $.each(jsonData[ue],function(key, value) {
    $('#gr').append('<option value=' + key + '>' + value + '</option>');
  });
};

和HTML:

<select id="ue" onChange="grfromue(this,jsonData);">
</select>
<select id="gr">
</select>

第二个选择框没有改变,我做错了什么?

2 个答案:

答案 0 :(得分:3)

以下代码段可能对您有所帮助

var json = {
            "AL2": {
                    "3810": "AL2GR1",
                    "3814": "AL2GR2",
                    "3815": "AL2GR3",
            },
            "AN3": {
                    "3818": "AN3GR1",
                    "3819": "AN3GR2"
            },
            "CME": {
                    "2405": "CME"
            }
    };

获取第一级的每个值

$.each( json, function( key, value ) {
    console.log( key  );
});

根据您的第一个输入获得第二级值

input = 'AL2';
$.each( json[input], function( key, value ) {
    console.log( key + ' : ' + value  );
});

希望这会对你有所帮助。

答案 1 :(得分:1)

您可以使用嵌套的JQuery每个方法迭代对象及其中的嵌套对象。您可以根据需要为多个嵌套对象扩展它。

jQuery.each(obj, function(i, val) {
    console.log("Object: " + i);
    jQuery.each(val, function(j, value) {
        console.log('It has ' + j + ' with value ' + value);
    });
});

如果要根据第一个选择框的值填充第二个选择框,可以使用数组表示法来获取对象的内容。像这样:

jQuery("#selec-id").change(function(){
    $("#second-select-id").html("");
    jQuery.each(obj[$(this).val()], function(key, value) {
        $("#second-select-id").append("<option value='"+key+"'>"+value+"</option>");
    });   
});