Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.12.2012, 11:25
Новичок на форуме
Отправить личное сообщение для Krava Посмотреть профиль Найти все сообщения от Krava
 
Регистрация: 05.11.2012
Сообщений: 8

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

Последний раз редактировалось Krava, 01.12.2012 в 11:28.
Ответить с цитированием
  #2 (permalink)  
Старый 01.12.2012, 11:51
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

var my_list = [];

$('#add_options .row').each(function(){
    var select = $(this).find('select').eq(0);
    my_list.push({
        id: select.id,
        value: select.value
    });
})
;
Ответить с цитированием
  #3 (permalink)  
Старый 01.12.2012, 12:08
Новичок на форуме
Отправить личное сообщение для Krava Посмотреть профиль Найти все сообщения от Krava
 
Регистрация: 05.11.2012
Сообщений: 8

danik.js
Немного не то.
Мне нужно отметить option в каждом select (поставить selected).
Ответить с цитированием
  #4 (permalink)  
Старый 01.12.2012, 12:46
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

var my_list = [{"id":"1", "value":"2"}, {"id":"2", "value":"5"}];
 
$.each(my_list, function(item){
    $('#' + item.id).val(item.value);
})
Ответить с цитированием
  #5 (permalink)  
Старый 01.12.2012, 13:22
Новичок на форуме
Отправить личное сообщение для Krava Посмотреть профиль Найти все сообщения от Krava
 
Регистрация: 05.11.2012
Сообщений: 8

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

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

Спасибо, но то что Вы предлагаете, я понять не могу.
Ответить с цитированием
  #6 (permalink)  
Старый 01.12.2012, 13:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Тоесть совершенно не то, что вы просили.
Ответить с цитированием
  #7 (permalink)  
Старый 01.12.2012, 14:23
Новичок на форуме
Отправить личное сообщение для Krava Посмотреть профиль Найти все сообщения от Krava
 
Регистрация: 05.11.2012
Сообщений: 8

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");
                }
            })
        })
Ответить с цитированием
  #8 (permalink)  
Старый 01.12.2012, 15:54
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Что соответствует второму приведенному мной коду.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать реакцию на изменение любого элемента формы. Mik Events/DOM/Window 3 28.07.2011 08:52
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как лучше сделать виджет? comentator Элементы интерфейса 0 25.03.2011 08:44
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Как сделать постоянную проверку на javascript alb Общие вопросы Javascript 18 09.01.2010 14:05