从json和不同级别创建多个选择框

时间:2014-08-15 16:53:53

标签: jquery json drop-down-menu

我有一个JSON字符串,我想从中创建多个选择框。但问题是,一个值在JSON文件中隐藏得更深。此外,json文件是动态创建的,因此一切都应该动态工作。

所以我的问题是如何创建选择框,以及如何将JSON文件中更深层的值放到同一个选择框中?

JSON

{

    "product": {
options": {

    "58395": {
        "id": 58395,
        "title": "Size",
        "values": {
            "220544": {
                "id": 220544,
                "title": "36",
                "active": true
            },
            "220545": {
                "id": 220545,
                "title": "37",
                "active": false
            },
            "220546": {
                "id": 220546,
                "title": "38",
                "active": false
            },
            "220547": {
                "id": 220547,
                "title": "39",
                "active": false
            }
        }
    },
    "61295": {
        "id": 61295,
        "title": "Color",
        "values": {
            "231911": {
                "id": 231911,
                "title": "Zwart",
                "active": true
            },
            "231912": {
                "id": 231912,
                "title": "Bruin",
                "active": false
            },
            "231913": {
                "id": 231913,
                "title": "Rood",
                "active": false
            }
        }
    },
    "61296": {
        "id": 61296,
        "title": "Fabric",
        "values": {
            "231914": {
                "id": 231914,
                "title": "1",
                "active": true
            },
            "231915": {
                "id": 231915,
                "title": "2",
                "active": false
            },
            "231916": {
                "id": 231916,
                "title": "3",
                "active": false
            }
        }
    }

}, // etc....

所以我尝试做的是创建3个选择框 - >尺寸,颜色和面料。这些选择框内必须有value title。所以你会得到类似的东西:

<option value=' + option.id + '>' + value.title + '</option>

所以我试过的是这个,显然不起作用:

  $.getJSON(url, function (data){
    var $selectOptions = $('<select />');
    $.each(data.product.options, function (index, option){
        var ids = "";
        $.each(options.values, function (i, v) { ids += " " + v.id; });
        $selectOptions.append('<option value=' + option.id + '>' +option.value.title + ids + '</option>');
    }); //etcetc...

这只会生成一个包含所有选项名称的选择框。而不是价值标题。

任何人都可以帮助我。我真的无法解决这个问题。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果我理解......你想为每个选项创建3个选择盒装的选项,并将值作为选项......

为什么你不试这个

$.getJSON(url, function (data){
     var $selectOptions = $('<div />');
     $.each(data.product.options, function (index, option){
        var select = $('<select />');
        $.each(option.values, function (i, value) { 
            select.append('<option value=' + value.id + '>' + value.title + '</option>');
        });
        $selectOptions.append('<label>' + option.value + '</label>');
        $selectOptions.append(select);
}); //etcetc...

我希望这可以帮助你根据自己的喜好修改......

答案 1 :(得分:1)

或许你想要这个

$.getJSON(url, function (data){
     var $selectOptions = $('<div />');
     $.each(data.product.options, function (index, option){
        var select = $('<select />');
        $.each(option.values, function (i, value) { 
            select.append('<option value=' + value.id + '>' + option.title + ': ' + value.title + '</option>');
        });
        $selectOptions.append(select);
}); //etcetc...

答案 2 :(得分:1)

您需要为options数组对象的每个成员构建一个select。用以下内容替换$ .getJSON()回调:

var products_el = $('#products');
$.getJSON(url, function(product_data) {
    for(var product_id in product_data) {
        var product = product_data[product_id];
        var product_el = $('<div class="product"><h3>' + product_id + '</h3></div>').appendTo(products_el);
        product_el.attr('id',product_id);
        for(var select_id in product.options) {
            var select = product.options[select_id];
            var select_wrap = $('<p><b>' + select.title + ' </b></p>').appendTo(product_el);
            var select_el = $('<select name="' + select_id + '" id="select_' + select_id + '"/>').appendTo(select_wrap);
            for(var option_id in select.values) {
                var option = select.values[option_id];
                var option_el = $('<option value="' + option.id + '" ' + (option.active ? 'selected' : '') + '>' + option.title + '</option>').appendTo(select_el);
            }
        }
    }
})

JSFiddle:http://jsfiddle.net/4hr4tn3k/1/