2013-10-08 62 views
0

我在這裏做錯了什麼?我有一個標籤陣列,當我在陣列上做一個jQuery each()它不會進入each()我確實有一個alert,但沒有任何反應。我檢查了我的錯誤日誌控制檯,並且沒有錯誤。那麼,我做錯了什麼?jQuery each()不工作

var tags = new Array(); 
tags["video-games"] = "Video Games"; 
tags["sports"] = "Sports"; 
tags["movies"] = "Movies"; 
tags["board-games"] = "Board Games"; 
tags["news"] = "News"; 
tags["television"] = "Television"; 
tags["computers"] = "Computers"; 
tags["opinions"] = "Opinions"; 
tags["reviews"] = "Reviews"; 

function updateTags(){ 
    console.log(tags); 
    $("div.tags > div > span:first-child").nextAll().remove(); 
    $.each(tags, function(key, val){ 
     $("div.tags > div").append("<span><a class='tag' href='/tags/" + key + "'>" + val + "</a></span>"); 

    }); 
} 

updateTags(); 
+2

數組不喜歡那個工作,使用對象。 – rlemon

+0

不支持字符串鍵javascript array –

+0

您使用了'Array []''''''''Object'}'。 –

回答

11

數組預期會有數字索引。
您已經創建了一個恰好具有一些屬性的空數組。在這種情況下

var tags = {}; 
tags["video-games"] = "Video Games"; 
tags["sports"] = "Sports"; 
tags["movies"] = "Movies"; 
tags["board-games"] = "Board Games"; 
tags["news"] = "News"; 
tags["television"] = "Television"; 
tags["computers"] = "Computers"; 
tags["opinions"] = "Opinions"; 
tags["reviews"] = "Reviews"; 

function updateTags(){ 
    //console.log(tags); 
    $("div.tags > div > span:first-child").nextAll().remove(); 
    for(var key in tags){ 
     $("div.tags > div").append("<span><a class='tag' href='/tags/" + key + "'>" + tags[key] + "</a></span>"); 
    } 
} 

updateTags(); 

應工作

var tags = { 
    "video-games": "Video Games", 
    ... 
}; 
+0

完美。這樣可行! –

+0

我同意。因爲你有一個鍵值對使用eobject並且使用Javascript'(var key in obj){console.log(obj [key]);}'來獲得預期的結果 –

0

所以:

您應該創建,而不是一個普通的對象。

+1

不要忘記Object.hasOwnProperty (在這種情況下,我不認爲它有所作爲),當迭代對象鍵時,記住 – rlemon

+0

@rlemon是一件好事:非常感謝。在你的第二個例子中,你明白 –

0

你的代碼是對象和屬性

var tags = {}; 
tags["video-games"] = "Video Games"; 

var tags = { 
"video-games" : "Video Games"; 
}; 

然後

$.each(tags, function(key, val) { 
    $("div.tags > div").append("<span><a class='tag' href='/tags/" + key + "'>" 
           + val + "</a></span>"); 

}); 
+0

你會在賦值錯誤中得到一個無效的左手邊,因爲它將' - '看作是一個操作符,而不是屬性名稱的一部分。只有支架符號可以用於這樣的名字 – rlemon

+0

@rlemon,謝謝你的通知..我沒有注意到'-' :(我會得到改變它 –

+0

你的新例子也會引發錯誤,你需要將'='替換爲' :'在對象字面屬性賦值中,並將分號放入對象內部。var tags = {'video-games':'Video Games'};'' – rlemon