Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Несколько селектов с одним содержанием (https://javascript.ru/forum/events/18072-neskolko-selektov-s-odnim-soderzhaniem.html)

Andres 15.06.2011 21:50

Несколько селектов с одним содержанием
 
Извиняюсь если неправильно тему назвал.
В общем цель у меня была такая. Выводятся подряд несколько select изначально с одинаковыми option, но активный только первый остальные disabled. При выборе в первом он становится недоступным, а в следующем должно исчезнуть выбранное значение. Соответственно в третьем не должно быть первых двух. Использую YUI 2 (в свое время выбрал потому что drag and drop получилось только через него реализовать в нужном мне виде). На OnChange повестил такую функцию (где i это порядковый номер селекта, а n их количество)ю
function sel_check(i, n){
    if (parseInt(i)+1==parseInt(n)){
        $G('sub_but').disabled=false;
    }
    else {
        $G('i_'+i).disabled=true;
        var id=parseInt($G('i_'+i).value);
        i++;
        var el = new YAHOO.util.Element('i_'+i);
        for (k=0; k<el.get('childNodes').length; k++){
            if (parseInt(el.get('childNodes').item(k).value) == id){
                el.removeChild(el.get('childNodes').item(k))
                break;
            }
        }
        $G('i_'+i).disabled=false;
    }
}

Что бы не было вопросов, глобально прописано
$G = YAHOO.util.Dom.get;
В общем с двумя селектами проблем нет, а вот если больше, то в третьем или позже появляется значение выбранное ранее.
Сори, если туплю, но я все таки на php пишу и с js крайне редко сталкиваюсь.

Andres 15.06.2011 22:26

Блин стоило написать на форуме, как понял ошибку.
function sel_check(i, n){
    if (parseInt(i)+1==parseInt(n)){
        $G('sub_but').disabled=false;
    }
    else {
        $G('i_'+i).disabled=true;
        var id=parseInt($G('i_'+i).value);
        i++;
        for (kk = i; kk < n; kk++){
            var el = new YAHOO.util.Element('i_'+kk);
            for (k=0; k<el.get('childNodes').length; k++){
                if (parseInt(el.get('childNodes').item(k).value) == id){
                    el.removeChild(el.get('childNodes').item(k))
                }
            }
        }

        $G('i_'+i).disabled=false;
    }
}
Но все равно мне кажется решение некрасивым. Есть ли что-то более правильное?


Часовой пояс GMT +3, время: 16:54.