Поэкспериментировал с классами "premium metal" - открыл много нового:)
Задача следующая: Как работать с уже сформированным списком? В первом списке я выбираю материал, список моделей фурнитуры собирается. Затем мне нужно сделать выборку по этому списку, то есть работать с уже сформированным. Как это реализовать? Как сохранить селект лист сформированных оптионов, например в цикле фор, что бы потом с ним работать? Пытался сделать, что то вроде этого:
var mat=document.getElementById("vl_mat_id"),
sor=document.getElementById("vl_sort_id"),
tex=document.getElementById("vl_tex_id"),
tex_c=tex.cloneNode(true),
tex_co=tex_c.getElementsByTagName("option"), sp, spc;
function f() {
var m=mat.options[mat.selectedIndex].className;
while (tex.options.length) {tex.remove(0)};
for (var i=0; i<tex_co.length;i++) {
if (tex_co[i].className.match(m)) {
tex.appendChild(tex_co[i].cloneNode(true));
sp=tex_co[i].cloneNode(true);
spc=sp.getElementsByTagName("option");
};
}
}
mat.onchange=f;
function p() {
var f=sor.options[sor.selectedIndex].className;
while (tex.options.length) {tex.remove(0)};
for (var i=0; i<spc.length;i++) {
if (spc[i].className.match(f)) {tex.appendChild(spc[i].cloneNode(true))};
}
}
sor.onchange=p;
Список сформировывается и я его записываю, затем работаю только с ним. Только то, что написал не работает. Не записывает. Почему? |
oneplus, имена переменным, функциям и классам надо осмысленные давать (как className, appendChild, cloneNode), чтобы было понятно о чем речь, а не просто букавки.
|
Прошу прощение, действительно не информативно.
var mat=document.getElementById("vl_mat_id"),//первый список - материалы
sor=document.getElementById("vl_sort_id"),//второй список - выборка
tex=document.getElementById("vl_tex_id"),//третий список - фактура
tex_c=tex.cloneNode(true),
tex_co=tex_c.getElementsByTagName("option"),
//тех_цо-клонированный список фактуры
sp, spc;//спц-клонированный список новосформированного
//функция при выборе материала
function f() {
//класс материала
var m=mat.options[mat.selectedIndex].className;
//удаляем список
while (tex.options.length) {tex.remove(0)};
//возвращаем список с нужным классом
for (var i=0; i<tex_co.length;i++) {
if (tex_co[i].className.match(m)) {
tex.appendChild(tex_co[i].cloneNode(true));
//записываем список для дальнейшего использования
sp=tex_co[i].cloneNode(true);
spc=sp.getElementsByTagName("option");
};
}
}
mat.onchange=f;
//функция для работы второго списка-выборки
function p() {
//класс выборки или сортировки
var f=sor.options[sor.selectedIndex].className;
//удаляем старый список
while (tex.options.length) {tex.remove(0)};
//возвращаем нужный список из ранее сохраненного
for (var i=0; i<spc.length;i++) {
if (spc[i].className.match(f)) {tex.appendChild(spc[i].cloneNode(true))};
}
}
sor.onchange=p;
|
|
Цитата:
tex.options.length=0 |
постарался разобрать пример связанных селектов
http://javascript.ru/forum/dom-windo...tml#post231937 правильно понимаю, сформированный список получится сохранить только через массив? вот этот список:
for (var i=0; i<tex_co.length;i++) {
if (tex_co[i].className.match(m)) {tex.appendChild(tex_co[i].cloneNode(true))};
для этого нужно писать еще цикл? |
Дописал так в первой функции f:
sp=tex.cloneNode(true);
spc=sp.getElementsByTagName("option");
Возможно это не совсем правильно, но работает. |
oneplus,
что и как вы пишите мне неизвестно, подсказать не могу. |
| Часовой пояс GMT +3, время: 20:16. |