2010-06-03 5 views
2

У меня есть список блоков выбора с инкрементальными числами для идентификации, например.заполнить поля выбора из строки json с помощью jquery

<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 или отображается непосредственно на странице? –

+0

Я управляю строкой JSON. Я новичок в JSON, так что вы можете сказать мне, какой должен быть правильный формат? Спасибо – John

ответ

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

+0

@John - Как вы получаете строку JSON? выводится ли она на страницу или загружается через AJAX? –

+0

отображается на странице так же, как у вас есть над i.e json = ??? Сама строка динамически создается с использованием сценариев на стороне сервера. – John

Смежные вопросы