在下拉列表中设置选项值

时间:2012-02-23 00:33:12

标签: javascript jquery

我正在尝试在下拉菜单/选择中设置选项。我以前做过这个,但由于某种原因我得到了一个错误,我不知道为什么。

代码

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'
        });

4 个答案:

答案 0 :(得分: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上使用它} element设置其值等于此函数中指定的选项以使其被选中的选项。

提示:您还可以删除每个嵌套对象周围的文字数组指示符并使用原始方法。 Demo

答案 1 :(得分:0)

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

.attr("value", item.Value)

答案 2 :(得分:0)

.val()用于获取表单元素的值。设置元素的value属性不是捷径。为此,您可以使用:

.attr("value", item.Value)

答案 3 :(得分: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);
});