-1

我有选择框(多个属性),称为“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”谬误。

随意投反对票。

4

2 回答 2

1

您需要在foo.teal数组中的对象之间使用逗号:

 "foo" : {
       "bar": ["x", "y", "z"],
       "teal" : [
            {"x" : ["A"], "y" : [...], "z" : [...]}, // <-- here
            {"x" : [...], "y" : [...], "z" : [...]}, // <-- and here
            {"x" : [...], "y" : [...], "z" : [...]}
        ]
 }

工作示例:http: //jsfiddle.net/gKvWj/

于 2013-03-07T03:50:45.333 回答
0

您使用 jQuery 选择器选择了错误的元素。它应该是option,而不是select,因此:

$('#c0r1 option[value="B"]').attr('selected', true);
于 2013-03-07T03:54:57.613 回答