jquery在选择框中选择多个值

时间:2013-03-07 03:42:47

标签: javascript jquery html json

我有选择框(多个属性),名为“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”的谬误而感到沮丧。

随意投票。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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

$('#c0r1 option[value="B"]').attr('selected', true);