2010-06-03 65 views
2

我有一个带增量数字的选择框列表,使用jquery填充来自json字符串的选择框

<select id="my-select-0"> 
    <option value="1">first option</option> 
    <option value="2">first option</option> 
< option value="3">first option</option> 
</select> 
<select id="my-select-1"> 
    <option value="1">first option</option> 
    <option value="2">first option</option> 
    <option value="3">first option</option> 
</select> 
<select id="my-select-2"> 
    <option value="1">first option</option> 
    <option value="2">first option</option> 
    <option value="3">first option</option> 
</select> 

我有一个json字符串,我想用它来预先填充这些选择,例如,

json = "[{'my-select': 1}, 
     {'my-select': 3}]"; 
上面 my-select-0的例子

将被设置为1,my-select-1设置为3

我会如何在JQuery中这样做呢?

感谢

+0

你控制这种格式吗?目前它不是有效的JSON,因此您将无法使用任何内置函数来解析它。它是通过AJAX获取,还是直接在页面中呈现? – 2010-06-03 13:26:10

+0

我控制JSON字符串。我是JSON新手,所以你能告诉我什么是正确的格式?谢谢 – John 2010-06-03 14:18:05

回答

3

我不知道究竟你后,但如果你改变了JSON是valid(双引号),您可以在使用$.parseJSON()和循环通过,这样做的:

var json = '[{"my-select": 1}, {"my-select": 3}]';​​​​​​​​​ 

var selects = $("[id^=my-select]"); //a class maybe? not sure of your options 
$.each($.parseJSON(json), function(i, v) { 
    selects.eq(i).val(v['my-select']); 
}); 
​ 

You can see a working demo here


更新:因为您可以控制如何在页面上呈现的只是删除初始报价它裹在,就像这样:

var json = [{'my-select': 1}, {'my-select': 3}]; 
var selects = $("[id^=my-select]"); 
$.each(json, function(i, v) { 
    selects.eq(i).val(v['my-select']); 
}); 

You can see it working here,JSON正是它的名字一样,对象符号 ...所以只需使用这样,不要把它作为一个字符串,直接输出/直接声明它作为一个javascript对象...在这种情况下,它是一个数组,你可以循环,当然更快,没有所有额外的工作。

+0

谢谢这正是我想要的。不过,我使用jquery 1.3.0,它没有parseJSON函数。您的解决方案是否可以使用1.3.0?谢谢 – John 2010-06-03 14:36:09

+0

@John - 你如何得到JSON字符串?它是呈现在页面中,还是通过AJAX获取? – 2010-06-03 14:57:29

+0

就像上面那样渲染到页面中,即json = ??? 该字符串本身是使用服务器端脚本动态创建的。 – John 2010-06-04 08:15:36

相关问题