【发布时间】:2013-08-31 15:48:16
【问题描述】:
我有两个下拉选择下拉菜单:一个用于区域,一个用于所选区域中的城市。结果由 AJAX 加载,在我的响应中,我得到了 JSON 数组中的所有城市:
{
1709: "Geertruidenberg",
1710: "Netersel",
1711: "Macharen",
1712: "Beers",
1713: "Hank",
1714: "Oudemolen",
1715: "Nistelrode"
}
我正在使用这个小插件来加载选择下拉列表中的数据:
(function($, window) {
$.fn.replaceOptions = function(options) {
var self, $option;
this.empty();
self = this;
$.each(options, function(index, option) {
$option = $("<option></option>")
.attr("value", index)
.text(option);
self.append($option);
});
};
})(jQuery, window);
还有这段 javascript 来做 AJAX 请求:
$('select#Profile_regionId').change(function() {
$.post('/ajax/getcities', {regionid: $(this).val()}, function(data){
//console.log(data.cities);
$("select#Profile_cityId").replaceOptions(data.cities);
}, 'json');
});
一切正常,除了城市下拉菜单自动按 JSON 数组键排序。我尝试为此使用 sort() 方法,但它不起作用,因为它是一个对象而不是数组。然后我尝试创建一个数组:
var values = [];
$.each(data.cities, function(index,value)) {
values[index] = value;
}
但由于某种原因,下拉列表会从 1 填充到该城市的第一个找到的 id(数组的键),我不知道它为什么这样做(数组本身看起来不错)。
我如何对事物进行排序,以便我的城市在下拉列表中按字母顺序排列?
【问题讨论】:
-
请注意,对象的顺序永远无法保证,因此您可能应该在进行排序时使用正确的数组。
-
我知道,使用 .sort() 对对象进行排序甚至是不可能的,这就是我将其转换为正确的 javascript 数组的原因,但它从 1 填充到只有键没有值的城市,所以在城市出现之前我会得到一堆空的
标签: javascript jquery arrays json sorting