Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как сделать двойной each ? (https://javascript.ru/forum/jquery/33647-kak-sdelat-dvojjnojj-each.html)

Krava 01.12.2012 11:25

Как сделать двойной 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'))
        });

danik.js 01.12.2012 11:51

var my_list = [];

$('#add_options .row').each(function(){
    var select = $(this).find('select').eq(0);
    my_list.push({
        id: select.id,
        value: select.value
    });
})
;

Krava 01.12.2012 12:08

danik.js
Немного не то.
Мне нужно отметить option в каждом select (поставить selected).

danik.js 01.12.2012 12:46

var my_list = [{"id":"1", "value":"2"}, {"id":"2", "value":"5"}];
 
$.each(my_list, function(item){
    $('#' + item.id).val(item.value);
})

Krava 01.12.2012 13:22

Вот что получилось для сбора всех данных:

$('#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

Спасибо, но то что Вы предлагаете, я понять не могу.

danik.js 01.12.2012 13:33

Ну так выражайтесь яснее. У вас массив то получится такой:
var my_list = [{"id":"1", "value":[1,2,3]}, {"id":"2", "value":[4,5,6]}]

Тоесть совершенно не то, что вы просили.

Krava 01.12.2012 14:23

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");
                }
            })
        })

danik.js 01.12.2012 15:54

Так к чему этот код:
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.