使用JQUERY / JSON自动填充选择下拉框

时间:2012-11-07 14:55:35

标签: jquery ajax json

好的,我花了很多时间查看示例,但找不到一个对我的情况有所帮助。我有一个JSON文件,简化了这个例子:

{
 "Company":[
    {
        "Position": "Manager",
        "Name": {
                            "11": "joe",
                            "12": "bill",
                            "166": "John"
                            }
    },
{

        "Position": "Tech",
        "Name": {
                            "11": "Bob",
                            "12": "Cindy",
                            "166": "Karl"
                            }
    },
{

        "Position": "Sales",
        "Name": {
                            "11": "Sam",
                            "12": "Ron",
                            "166": "Sara"
                            }
    }
]}

我正在尝试创建2个选择框。当用户选择第一个位置框时,它将使用属性(名称)自动填充第二个位置。所以这就是我到目前为止所做的:

<select id="job"></select>
<select id="name"></select>

和代码:

$select = $('#job');
$select2 = $('#name');

$.ajax({
    url: 'factors.json',
    dataType: 'JSON',
    success: function(data) {

        $select.html('');
        $.each(data.Company, function(key, val) {
            $select.append('<option id="' + key + '">' + val.Position + '</option>');



            $("#job").change(function() {
                $.each(val.Name, function(key2, val2) {
                    $select2.append('<option id="' + key2 + '">' + val2 + '</option>');
                })
            })
        })
    },
});​

此代码将自动填充第二个框,其中包含每个位置的所有名称。我似乎无法弄清楚如何用每个独特对象的名称填充它。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题。

$.each(data.Company, function(key, val) {
    $select.append('<option id="' + key + '">' + val.Position + '</option>');
});



$("#job").change(function(e) {
    $select2.empty();
    $index = $(this).children(':selected').attr('id');
        for (var k in data.Company[$index].Name) {
            $select2.append('<option id="' + k + '">' + data.Company[$index].Name[k] + '</option>');
        }
});

答案 1 :(得分:1)

尝试这样的事情。你应该有一个值属性供你选择。我在选项中添加了一个data-id attr,因此我可以用它来存储Position的索引。

$.each(data.Company, function(i, v) {
    // create option with value as index - makes it easier to access on change
    var options = $('<option/>', {value: v.Position, text: v.Position}).attr('data-id',i);    
    // append the options to job selectbox
    $('#job').append(options);
});

// bind change event
$('#job').change(function() {
    // cache this
    var $el = $(this);
    // get data-id attr from selected option
    var id = $('option:selected',this).data('id');
    // empty select
    $('#name').empty();
    // get name values for selected option
    $.each(data.Company[id].Name, function(i, v) {
        // create option elements
        var options = $('<option/>', {value: v, text: v});
        // append the options to name selectbox
        $('#name').append(options);
    });    
}).change();// trigger change() on page load to fill name selectbox​

http://jsfiddle.net/wirey00/xYX8z/