【发布时间】:2012-03-14 18:02:57
【问题描述】:
我正在使用来自 getJSON 的 JSON 数据填充下拉列表。
填充工作正常,但试图通过与data.length 比较来确定它已完成无法正常工作,因为data.length 是undefined,我不明白为什么!
数据如下:
{
"1": {
"id": "1",
"name": "Plymouth"
},
"2": {
"id": "2",
"name": "Torquay"
}
}
我的代码如下:
$('.locationList').empty();
$('.locationList').append('<option value="">Select...</option>');
$.getJSON('/Settings/locations.txt', function (data) {
var dataNum = data.length;
var counter = 1;
$.each(data, function (i, item) {
$('.locationList').append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
if (counter >= dataNum) {
$('#bookTo').val(locationID + 1);
$('#transferFrom').val(locationID);
};
counter++;
});
});
本节:
if (counter >= dataNum) {
$('#bookTo').val(locationID + 1);
$('#transferFrom').val(locationID);
};
counter++;
旨在让我在 $.each 循环完成后预设下拉框的值(这适用于其他列表),但它没有发生。
当我运行alert(data.length) 时,我得到undefined 这毫无意义,因为data 显然确实有一个length,以便它通过$.each 正确填充下拉框,它确实如此!
编辑:抱歉,应该补充一下,变量locationID 是在脚本前面的 Cookie 中声明的,并且是有效的
【问题讨论】:
-
JavaScript object literal length === undefined? 的可能重复项
data是一个对象,而不是字符串或数组。对象不公开length属性。 -
当你有 jQuery 的 .each() 函数的索引值时,为什么你需要
dataNum变量? -
我需要 dataNum 变量来确定
$.each何时完成,因为不管文档中说了什么,否则下拉框的值选择会在它完全填充之前发生