1

我已经尝试自己解决这个问题,但我没有想法。

我有一个循环,它只是通过遍历数组来生成列表项。但它似乎每次都在做一个额外的循环,因此拉动了一个未定义的元素。例如,我的数组在专辑[0] 处停止,但它会继续并尝试为不存在的专辑[1] 执行此操作。随之而来的是怪异,更具体地说,它最终从我的过滤器功能中提取了文本?

为什么这不会发生在 chrome 中?这就是在 ie8 http://dl.dropbox.com/u/1261672/groovyBox2222/guts/artists.html?Hackers-vs-Slackers&

 getPlaylist(function(songs) // pulls out songs matching artist
 {

    var albums = new Array();
    for (obj in songs){
        if (songs[obj]["artist"] == artist){
            albums.push(songs[obj]["album"]);
        }

        albums = removeDuplicateElement(albums);
    }
    var albumname;
    for (x in albums){ // creates LI of albums
        albumname = '<li><a href="albums.html?'+escape(albums[x])+
           '&'+escape(artist)+'">'+albums[x]+"</a></li>";
        $('#albumlist').append(albumname);
    }
};
4

2 回答 2

3

for in循环数组时永远不要使用......这是不可预测的。改用这个:

for (var i = 0; i < albums.length; i++) {
    var obj = albums[i];
}
于 2011-08-26T17:44:41.093 回答
0

您正在使用导致问题的“foreach”循环。改为这样做:

for (var i = 0; i < albums.length; i++)
{
    // your code
}
于 2011-08-26T17:45:02.830 回答