我有选择框(多个属性),称为“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 和 value 被正确分配,并且 jQuery 不会抛出任何错误......只是,没有分配任何内容。
我也试过
$("#c0r1[value='" + value + "']").attr("selected", "selected");
//and
$("#c0r1[value='" + value + "']").prop("selected", true);
这是我在网上其他地方找到的建议。
显然,一旦我完成了这项工作,我将构建代码以便选择所有值。为什么它不起作用,atm?
在页面的其他地方,我已经能够将 .val() 方法与相同的 json 对象和选择框一起使用,并且效果很好。然而,这是它是“倍数”的第一种情况。
谢谢,山姆。
更新:
嗯,刚刚想到:由于 DOM 元素 c0r1 及其选项是动态生成的,jQuery 是否可能不知道它们的存在?虽然我认为这会引发异常(这段代码没有这样做)。
更新 2:
我已经解决了,这个问题与这个问题中讨论的内容无关,这仅仅是因为在收到选项之前“选择”选项的代码正在运行。这些选项来自服务器响应,我没有想到会在服务器响应之前调用上述代码。
看起来我爱上了我的教授警告我的古老的“延迟为 0”谬误。
随意投反对票。