each()on select不迭代

时间:2010-08-02 15:37:12

标签: javascript jquery

出于某种原因,当我在下面提醒时,我只能找到第一个选项然后它存在我的整个功能。它永远不会遍历每个选项:

    function SelectAlbumOption(iAlbumID, iAlbumDropdownID)
    {
        var dropdownID = '#' + iAlbumDropdownID;

        $(dropdownID).each(function(index, currentOption)
        {
            alert("(currentOption).attr('value'): " + $(currentOption).attr("value"));
            if($(currentOption).attr("value") == iAlbumID)
            {
                alert("matched option");
                $(currentOption).attr("selected", "yes");
                return false;
            }
        });
    }

在调用上面的函数之前,我向该选择添加了选项,因此在调用此函数之前它们确实存在。

2 个答案:

答案 0 :(得分:6)

要获得选项,您需要通过它们进行迭代,而不是<select>本身,如下所示:

var dropdownID = '#' + iAlbumDropdownID + ' option';

目前,它正在迭代<select>元素的集合(只有其中一个),并为您提供价值。如果您希望<option>您的选择器需要归结为那些。

另外,您应该将selected设置为true"selected"而不是"yes"(尽管它会在幕后转换为true)。另外请注意:$(currentOption).attr("value")可以只是this.value,不需要将它包装在jQuery对象中来获取该属性。


顺便说一句,似乎你基本上重新创建了.val() function,你有什么理由不这样做吗?:

$('#' + iAlbumDropdownID).val(iAlbumID);

它应该与您当前正在进行的操作具有相同的效果,没有警报(假设这些是用于调试)。

答案 1 :(得分:1)

您是否正在离开代码的关键部分?因为您没有告诉我们您是否多次调用SelectAlbumOption

您的函数使用ID并在1个元素上执行.each(唯一ID)。

你的意思是

    var dropdownID = '#' + iAlbumDropdownID;
    $('option', dropdownID).each();

或者

$(dropdownID + ' option').each()