Как сделать двойной 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, время: 20:02. |