我必须在某些<select>
代码中选择正确的选项。我有一个数组,其中键是标签的数量,值是必须选择的选项的值属性。
这是我的代码:
//array ids contains values of option to select.
//.ingredients is class of <select> tags
var i=0;
$('.ingredients').each(function() {
$(this).find('option[value="' + ids[i] + '"]').attr("selected","selected");
i++
});
对于<select class='ingredients>
的每个选项,请选择右侧选项字段。 ids数组的键表示<select>
标记的数量。这就是我想要做的。
有人能告诉我错误是什么吗?
答案 0 :(得分:2)
你忘记了一个“;”在i++
...
您可以将index
与each()
一起使用,而不是使用“i”变量:
$('.ingredients').each(function(index) {
$(this).find('option[value="' + ids[index] + '"]').attr("selected","selected");
});
另外,在一个选项上设置选定的attr比你最初想的那样有点棘手,因为如果select元素是'select-one'类型,它会影响其他元素。这是jQuery Form插件中提供的一个小插件,用于处理选择/取消选择选项以及复选框和无线电。像这样使用它:
将它放在代码中的某处:
$.fn.selected = function(select) {
if (select == undefined) select = true;
return this.each(function() {
var t = this.type;
if (t == 'checkbox' || t == 'radio')
this.checked = select;
else if (this.tagName.toLowerCase() == 'option') {
var $sel = $(this).parent('select');
if (select && $sel[0] && $sel[0].type == 'select-one') {
// deselect all other options
$sel.find('option').selected(false);
}
this.selected = select;
}
});
};
然后尝试替换您先给出的代码:
$('.ingredients').each(function(index) {
$(this).find('option[value="' + ids[index] + '"]').selected(true);
});
答案 1 :(得分:0)
而不是.attr("selected", "selected")
,请尝试.prop("selected", true)
[更新]
实际上,我没有看到代码有任何问题。这是工作。我认为问题出在你的HTML上。您是否在DOM Ready事件之前执行代码?
尝试
$(function(){
$('.ingredients').each(function(i) {
$(this).find('option[value="' + ids[i] + '"]').prop("selected", true);
i++
});
});