Как сделать двойной each ?
Здравствуйте, уважаемые.
Вот несколько часов пытаюсь решить, но никак не выходит. Как можно обойти все select и отметить такой результат: var my_list = [{"id":"1", "value":"2"}, {"id":"2", "value":"5"}]; <div id="add_options"> <div class="row"> <label class="required">опция1<span class="required">*</span></label> <select name="Options[1]" id="1"> <option value=""></option> <option value="1">атрибут1</option> <option value="2">атрибут2</option> <option value="3">атрибут3</option> </select> </div> <div class="row"> <label class="required">опция2<span class="required">*</span></label> <select name="Options[2]" id="2"> <option value=""></option> <option value="4">aaaaa</option> <option value="5">bbbbb</option> <option value="6">ccccc</option> </select> </div> </div> Вот что пока удалось сделать, но не знаю как дальше быть... $('#add_options .row').each(function(){ alert($(this).find('select').attr('id')) }); |
var my_list = []; $('#add_options .row').each(function(){ var select = $(this).find('select').eq(0); my_list.push({ id: select.id, value: select.value }); }); |
danik.js
Немного не то. Мне нужно отметить option в каждом select (поставить selected). |
var my_list = [{"id":"1", "value":"2"}, {"id":"2", "value":"5"}]; $.each(my_list, function(item){ $('#' + item.id).val(item.value); }) |
Вот что получилось для сбора всех данных:
$('#add_options .row').each(function (index) { var select = $(this).find('select').eq(0); var i = index; var id = select.attr('id'); my_list.push({ id:id, value:[] }); select.children('option').each(function () { var value = $(this).val(); my_list[i].value.push(value) }); }) danik.js Спасибо, но то что Вы предлагаете, я понять не могу. |
Ну так выражайтесь яснее. У вас массив то получится такой:
var my_list = [{"id":"1", "value":[1,2,3]}, {"id":"2", "value":[4,5,6]}] Тоесть совершенно не то, что вы просили. |
danik.js
Вы меня подтолкнули на правильное решение. Спасибо! Вот конечный результат чего я хотел. var my_list = [ {"id":"1", "value":"2"}, {"id":"2", "value":"5"} ]; $.each(my_list, function (item) { var select = $('#krava' + my_list[item].id); select.children('option').each(function () { if ($(this).val() == my_list[item].value) { $(this).attr("selected", "selected"); } }) }) |
Так к чему этот код:
select.children('option').each(function () { if ($(this).val() == my_list[item].value) { $(this).attr("selected", "selected"); } }) Не проще ли select.val(my_list[item].value); И да, я ошибся, передаются параметры (index, item) а не (item, index). Таким образом: $.each(my_list, function (index, item) { $('#krava' + item.id).val(item.value); }) Что соответствует второму приведенному мной коду. |
Часовой пояс GMT +3, время: 06:00. |