多个选择列表值在javascript中交换额外的时间

时间:2012-03-06 20:04:17

标签: javascript jquery html

我有一个id为“genres”的多选列表项。在我的代码中,我得到“genres”的值,拆分它,然后迭代并将每个值添加到另一个数组。但由于某种原因,它增加了一个额外的条目。这是我的代码:

if ($("#genres").val()!=null) {
    var genres = $("#genres").val().toString().split(",");
    for (var i in genres) {
        model.TitleGenres.push({ GenreId: genres[i] });
    }
}

变量model.TitleGenres初始化为[];

当我在Firebug中调试它时,我得到的值是:

genres: [ "6", "1770" ]

在循环结束时,我得到:

model.TitleGenres: [Object { GenreId="6"}, Object { GenreId="1770"}, Object { GenreId=function()}]

我不知道为什么有一个额外的GenreId = function()条目,有人可以解释为什么会这样,以及如何消除它?

3 个答案:

答案 0 :(得分:2)

不要使用for in在JS中迭代(数字索引)数组。

使用for (var i = 0, len = array.length; i < len; i++) { ... }

答案 1 :(得分:2)

它导致您使用'for in'而非foreach或simpley for迭代数组。使用for in迭代数组对象的所有成员,或者在本例中为jquery对象。似乎其中一个是一个功能。请改用genres.each()

答案 2 :(得分:0)

这个怎么样:

var x = [];
$('#genres option:selected').each( function() { x.push($(this).val()) } );

现在“x”将包含所有选定的值。