出于某种原因,当我在下面发出警告时,我只进入第一个选项,然后它就存在我的整个功能。它从不遍历每个选项:
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;
}
});
}
就在调用上面的这个函数之前,我向那个选择添加了选项,所以它们在这个函数被调用之前就存在了。
最佳答案
要获得选项,您需要遍历它们,而不是 <select>
本身,像这样:
var dropdownID = '#' + iAlbumDropdownID + ' option';
目前它正在遍历 <select>
的集合元素(仅其中之一)并为您提供它的值(value)。如果你想要 <option>
您的选择器需要深入到那些。
你还应该设置 selected
至 true
或 "selected"
而不是 "yes"
(尽管它在幕后被转换为 true
)。另一张纸条,这个:$(currentOption).attr("value")
可以是this.value
,无需将其包装在 jQuery 对象中即可获取该属性。
顺便说一句,您似乎基本上重新创建了 .val()
function ,你有什么理由不这样做吗?:
$('#' + iAlbumDropdownID).val(iAlbumID);
它应该与您当前正在执行的操作具有相同的效果,但没有警报(假设那些用于调试)。
关于javascript - each() on select 不迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3389279/