2012-02-23 31 views
0

我正在嘗試在下拉菜單/選擇中設置選項。我之前做過這個,但由於某種原因,我收到一個錯誤,我不知道爲什麼。在下拉菜單中設置選項值

代碼

var _loc = { 
     ALL_BUYS: [{ Text: "All Buys", Value: "AAA"}], 
     NETWORK_BREAK: [{ Text: "Network Break", Value: "NTN"}], 
     SYNDICATED_BREAK: [{ Text: "Syndicated Break", Value: "STA"}], 
     LOCAL_BREAK: [{ Text: "Local Break", Value: "LTA"}], 
     NATIONAL_LOCAL: [{ Text: "National/Local", Value: "LTN"}], 
     LOCAL_LOCAL: [{ Text: "Local/Local", Value: "LTL"}]//, 
    }; 

lstOptions = $("<select></select>"); 

$.each(_loc, function (i, item) 
    { 
     $("<option></option>") 
      .appendTo(lstOptions) 
      .html(item.Text) 
      .val(item.Value) // receive error: Object has no method 'val' 
     }); 

回答

3

你沒有正確地從對象中獲取值。

格式是像這樣:

{key1:[{0, 1}], key2:[{0, 1}], key3:[{0, 1}]} 

當您使用$.each,它會選擇每一個在此狀態下:

[{0, 1}] 

在第一次迭代,它會選擇具有key1的關聯的值,第二個,key2等

既然你有數組嵌套在每個鍵的值,你需要指定它找到匹配值中的第一個數組:

var _loc = { 
    ALL_BUYS: [{ Text: "All Buys", Value: "AAA"}], 
    NETWORK_BREAK: [{ Text: "Network Break", Value: "NTN"}], 
    SYNDICATED_BREAK: [{ Text: "Syndicated Break", Value: "STA"}], 
    LOCAL_BREAK: [{ Text: "Local Break", Value: "LTA"}], 
    NATIONAL_LOCAL: [{ Text: "National/Local", Value: "LTN"}], 
    LOCAL_LOCAL: [{ Text: "Local/Local", Value: "LTL"}] 
}; 

lstOptions = $("select"); 

$.each(_loc, function(i, item){ 
    $("<option></option>") 
     .appendTo(lstOptions) 
     .html(item[0].Text) 
     .attr("value", item[0].Value); 
});​ 

Demo

請注意item[0]。它所做的是選擇索引爲0的數組作爲其抓取的值。由於只有一個,所以這個單個數組的索引是0,所以它選擇了特定的一個。然後你找到並設置它的文本和價值。

另外請注意,我改變val()attr(),因爲option元素不支持val()(你可以,但是,使用它select元素上設置其值等於在這個函數指定的做出選擇它被選中)。

提示:您還可以擺脫每個嵌套對象周圍的文字數組指示器並使用原始方法。 Demo

+0

+1因爲看到的不僅僅是明顯的 – Phil 2012-02-23 00:49:15

+0

開始發佈我的答案,我看到你的:)。感謝幫助。你的答案也寫得比我的好。我認爲你可以do.val()。我之前做過這件事,而且我非常肯定它的工作原理。 – 2012-02-23 01:06:14

+0

也感謝關於數組指標的提示。 – 2012-02-23 01:26:58

0

<option>元素不支持val()。我想你想使用attr()

.attr("value", item.Value) 
0

.val()用於獲取表單元素的值。這不是設置元素的value屬性的捷徑。要做到這一點,你可以使用:

.attr("value", item.Value) 
0

想通了。我想我的項目在循環中按以下格式

Item: "All Buys" 
Value: "AAA" 

相反,他們在此格式

[0]Option 
    Item: "All Buys" 
    Value: "AAA" 

如果我改變我的循環這個它的工作原理

$.each(_loc, function (i, item) 
{ 
    $("<option></option>") 
      .appendTo(lstOptions) 
      .html(item[0].Text) 
      .val(item[0].Value); 
});