3

是的,我对同一主题有 3 或 4 个不同的答案,但我正在努力将它们结合起来以创造我需要的东西。我使用 Json.Net 序列化我的结果,这会产生以下对象:

"[  { "Id": 1, "OrderInList": 1  },
    { "Id": 2, "OrderInList": 2  },
    { "Id": 4, "OrderInList": 3  }
]"

我希望选项值文本成为 OrderInList 值(稍后我将使用 Id 和其他内容)。

我目前有以下代码,但它创建了143 个选项框。我可以看到它为什么会这样做,但我不确定如何改变它以使其正常工作。

    $.getJSON("/Json/GetOrderSelectList?parentCategoryId=" + postData, null, function (jsonResult) {
        $('#orderInList').attr('enabled', 'true');
        $.each(jsonResult, function() {
            $.each(this, function(index, item) {
                                $('#orderInList').append(
                                    $("<option></option>")
                                        .text(index)
                                        .val(index)
                                );

            });
        });

任何帮助,将不胜感激!

4

2 回答 2

8

我认为您正在尝试这样的事情:

var jsonResult = [{
    "Id": 1,
    "OrderInList": 1},
{
    "Id": 2,
    "OrderInList": 2},
{
    "Id": 4,
    "OrderInList": 3}
]

$('#orderInList').attr('enabled', 'true');
$.each(jsonResult, function() {
   $('#orderInList').append(
        $("<option></option>").text(this.Id).val(this.OrderInList);
   );
});​

演示

完整代码

$.getJSON("/Json/GetOrderSelectList?parentCategoryId=" + postData, function(jsonResult) {
    $('#orderInList').attr('enabled', 'true');
    $.each(jsonResult, function() {
        $('#orderInList').append(
            $("<option></option>").text(this.Id).val(this.OrderInList)
        );
    });
});​
于 2012-08-12T09:47:23.030 回答
0

您不需要嵌套在对 .each 的第一次调用中的对 .each 的额外调用。只需在第一个 .each 调用中传递项目和索引,然后创建您的元素。尝试这个:

var json = [  { "Id": 1, "OrderInList": 1  },
    { "Id": 2, "OrderInList": 2  },
    { "Id": 4, "OrderInList": 3  }
];

function createSelect(options){
    $.each(options,function(index,item){
           $("#orderInList").append($("<option></option>").attr("value", item.OrderInList).text(item.OrderInList));

    });
}

$(document).ready(function(){
createSelect(json);
});

工作示例:http: //jsfiddle.net/BzC9N/

于 2012-08-12T09:54:25.437 回答