我有选择框(多个属性),名为“c0r1”,它包含选项:
<select id="c0r1" multiple="multiple" class="fcv">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
我也有对象“foo”
"foo" : {
"bar": ["x", "y", "z"],
"teal" : [
{"x" : ["A"], "y" : [...], "z" : [...]},
{"x" : [...], "y" : [...], "z" : [...]},
{"x" : [...], "y" : [...], "z" : [...]}
]
}
bar存储一组值,然后将其用作青色数组中对象的键。
c0r1(和c0r2,c1r1,...)的内容由“x”,“y”和“z”确定。在代码的其他地方,它们代表一组值。页面为选择框分配一个组,并从组中填充选项(以这种方式生成第一个HTML)。
出于这个问题的目的,c0r1被分配(代码中的其他地方)“x”,其中包含值“A”,“B”和“C”
如果没有深入了解为什么它们是这样的,我需要获取foo.teal.x的值,并使用它们并“选择”c0r1中的相应值。
当我使用以下js时:
var blah = foo.bar[0]; //blah = x
var value = foo.teal[0][blah][0]; //value = A
$("#c0r1").val(value);
没有选择任何内容。我已经使用调试器,正确分配了blah和值,并且jQuery不会抛出任何错误......只是,没有任何内容被分配。
我也试过
$("#c0r1[value='" + value + "']").attr("selected", "selected");
//and
$("#c0r1[value='" + value + "']").prop("selected", true);
我在网上其他地方找到了哪些建议。
显然,一旦我开始工作,我将构建代码,以便选择所有值。为什么它不起作用,atm?
在页面的其他地方,我已经能够将.val()方法与相同的json对象和选择框一起使用,并且它工作正常。然而,这是第一个“多重”的案例。
谢谢, 萨姆。
更新
嗯,刚才有一个想法:由于DOM元素c0r1及其选项是动态生成的,jQuery是否可能不知道它们存在?虽然我认为会引发异常(这段代码没有这样做)。
更新2:
我已经解决了,问题与此问题中讨论的内容无关,这只是因为“选择”选项的代码是在收到选项之前运行的。这些选项来自服务器响应,我没有想到在服务器响应之前会调用上面的代码。
看起来我因为教授警告我的旧“延迟是0”的谬误而感到沮丧。
随意投票。
答案 0 :(得分:1)
您需要在foo.teal
数组中的对象之间使用逗号:
"foo" : {
"bar": ["x", "y", "z"],
"teal" : [
{"x" : ["A"], "y" : [...], "z" : [...]}, // <-- here
{"x" : [...], "y" : [...], "z" : [...]}, // <-- and here
{"x" : [...], "y" : [...], "z" : [...]}
]
}
答案 1 :(得分:0)
您正在使用jQuery选择器选择错误的元素。它应该是option
,而不是select
,因此:
$('#c0r1 option[value="B"]').attr('selected', true);