对于下面的此方法,传入数组的长度为0,对于下面传递的数组属性未定义,并且不确定原因:
function BindAlbumDropdownList(aAlbums, defaultAlbumID)
{
if(aAlbums.length == 0)
return;
var albumDropdownID = $("#abumDropdown").attr("id");
AddDropdownItem("-Select an Album-", "-1", "albumDropdown");
for(var a in aAlbums)
{
alert("a.name, a.id, albumDropdown: " + a.name + "|" + a.id + "|" + albumDropdownID);
AddDropdownItem(a.name, a.id, albumDropdownID);
}
}
我正在传入一个先前在另一个调用此方法的方法中定义的数组,并且数组已经定义并像这样传递:
var aAlbums = GetAllAlbums(userID, accessToken);
var defaultAlbumID = aAlbums[0].id;
BindAlbumDropdownList(aAlbums, defaultAlbumID)
GetAllAlbums正在其中返回这样的变量设置:
var aFacebookAlbums = []; // array
并在填充后返回此数组。
但是当我在BindAlbumDropdownList中输入for循环时,我的数组属性未定义以及检查长度为零
这是警报给我的信息:
a.name, a.id, albumDropdown: undefined|undefined|albumDropdown
我很肯定GetAllAlbums正在返回一个包含值的数组,因为
var defaultAlbumID = aAlbum[0].id;
为我提供了有效值
我注意到BindAlbumDropdownList似乎并不真正知道传入的aAlbums是一个数组,即使我将一个数组传递给它。因为我在尝试执行aAlbum.length时没有显示属性数组的intellisense,但是在我从GetAllAlbums函数返回之前,我确实得到了数组上的.length属性。
答案 0 :(得分:1)
您应该使用for statement而不是for-in statement
for(i=0; i < aAlbums.length; i++)
{
var a = aAlbums[i];
alert("a.name, a.id, albumDropdown: " + a.name + "|" + a.id + "|" + albumDropdownID);
AddDropdownItem(a.name, a.id, albumDropdownID);
}
答案 1 :(得分:0)
你确定你包含jQuery好吗?选择器ID的“abumDropdown”是否正确?你可以在javascript中使用for ... in尽管不推荐使用。
答案 2 :(得分:0)
如果你要求
的价值,你会得到什么?0.name 1.name 2.name
现在,如果你要求
的价值,你会得到什么一个[0]。名称 一个[1]。名称 一个[2]。名称
for(var a in aAlbums)
{
alert("aAlbums[a].name, aAlbums[a].id, albumDropdown: " + a.name + "|" + a.id + "|" + albumDropdownID);
AddDropdownItem(aAlbums[a].name, aAlbums[a].id, albumDropdownID);
}