1

我的问题:

我知道这听起来可能很有趣,但这是我的问题:我有一个select通过 Ajax 以下列方式成功填充的内容:

$.each(data, function(key, value) {
            options += '<option value="' + key + '">' + value + '</option>';
        });

我的服务器返回一个排序的地图(按排序)。一切正常,在 Internet Explorer(7,8 和 9)中,选择显示为未排序。

我发现了什么:

我发现 IE 实际上显示它按key我传递给value参数的排序。我的列表在后端按 排序value,我想这样显示它(在 Chrome、Firefox 等上运行良好)。

我在想这种排序的原因很可能是$.eachjQuery 函数。也许它正在按键迭代?不过,我不确定这一点,所以我希望得到一些反馈。另外,我怎样才能在地图上进行替代迭代,以确保这一点?我试图避免执行 jQuery 排序,因为排序是在后端完成的。

我提到我需要传递给我传递它们的方式keyvalueoption

编辑 - 一个例子:

应该如何(并且在 Chrome 和 Firefox 上):

<option value="13">A</option>
<option value="2">B</option>
<option value="55">C</option>

在 IE 中是怎样的:

<option value="2">B</option>
<option value="13">A</option>
<option value="55">C</option>
4

2 回答 2

2

您的问题是对象实际上没有键/值对的特定顺序。IE改变它并没有错。使用数组来保存对,例如:

[
    {
        "value": "13",
        "text": "A"
    },
    {
        "value": "2",
        "text": "B"
    },
    {
        "value": "55",
        "text": "C"
    }
]

并循环如下:

$.each(data, function(index, option) {
    options += '<option value="' + option.value + '">' + option.text + '</option>';
});

最后,您不应该将 HTML 作为字符串来构建元素。使用 DOM。我想你有someElement.html(options);什么地方?相反, makeoptions = someElement;并执行以下操作:

$.each(data, function(index, option) {
    options.append(
        $('<option>').prop('value', option.value).text(option.text)
    );
});
于 2012-05-08T13:50:41.237 回答
0

minitech是正确的。

假设订单将保留在对象中是多么好的,但不能保证,并且可能会在任何随机时间(或在 IE 中,一直)中断。

然而,另一种解决方案是传递一个排序数组,该数组具有您想要通过键的顺序。

[
  {
    13: 'A',
    2: 'B',
    55: 'C'
  },
  [ 13, 2, 55 ]
 ]
于 2012-05-08T13:58:23.760 回答