Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Взаимосвязанные селекты

10K
28 октября 2005 года
krafty
14 / / 29.08.2005
Это НЕ классическая задача типа в первом списке выбираем категорию, а во втором динамически формируются соответствующие подкатегории.
Проблема вот в чем.
Есть список select1 multiple. Изначально в нем ничего не выбрано. Когда выделяем элемент, он появляется в списке select2, выделяем еще один - он добавляется к первому. Если снимаем в select1 выделение с какого-либо элемента, то этот элемент должен убраться из select2. Т.е. в select2 должны находиться только те элементы, которые в данный момент выбраны в select1.
513
28 октября 2005 года
Yurec
228 / / 21.09.2005
Код:
<script>
function ChangeS2()
{

    s2_length=s2.options.length;
    for(i=0;i<s2_length;i++)
        s2.remove(s2.i);       


    for(i=0;i<s1.options.length;i++)
    {
        if(s1.options.selected)
            s2.options[s2.options.length] = new Option(s1.options.text+'!'+i, 'new');
    }

}
</script>


<select name="s1" zize=5 &#111;&#110;Change='ChangeS2();' MULTIPLE>
<option> Item 1
<option> Item 2
<option> Item 3
<option> Item 4
</select>

<select name="s2" zize=5 MULTIPLE>
</select>


Главное не меняй
s2_length=s2.options.length;
for(i=0;i<s2_length;i++)
s2.remove(s2.i);

НА

for(i=0;i<s2.options.length;i++)
s2.remove(s2.i);

Просто 20 минут с етим пробился тока потом дошло в чём не прав.....
А так вроде все как ты спрашивал.



10K
28 октября 2005 года
krafty
14 / / 29.08.2005
спасибо огромное!!! так быстро сваял работоспособный код.
я немного модифицировал под свои потребности. мне нужно, чтобы в новый список также передавались value первого списка.
Код:
<script>
function ChangeS2()
{
var s1=document.forms['form1']['s1'];
var s2=document.forms['form1']['s2'];
s2_length=s2.options.length;
for(i=0;i<s2_length;i++)
s2.remove(s2.i);


for(i=0;i<s1.options.length;i++)
{
if(s1.options.selected)
s2.options[s2.options.length] = new Option(s1.options.text, s1.options.value);
}

}
</script>
<body>
<form name="form1" method="post" action="">
  <select name="s1" size="4" multiple>
    <option value="1">item1</option>
    <option value="2">item2</option>
    <option value="3">item3</option>
    <option value="4">item4</option>
  </select>
  <select name="s2" size="1">
  </select>
</form>
</body>

но не работает. теперь вообще второй список не формируется
513
28 октября 2005 года
Yurec
228 / / 21.09.2005
Тока вот я щас задумался
s2.i
тоже самое что и
s2.options

почему?
10K
28 октября 2005 года
krafty
14 / / 29.08.2005
сорри, провтыкал все работает! спасибо еще раз! аж стыдно мне, все никак не доберусь до JS. А ведь штука-то нужная!
10K
28 октября 2005 года
krafty
14 / / 29.08.2005
s2.i? т.е. к элементам списка можно обращаться s2.1, s2.2, ... ?
513
28 октября 2005 года
Yurec
228 / / 21.09.2005
Цитата:
Originally posted by krafty
s2.i? т.е. к элементам списка можно обращаться s2.1, s2.2, ... ?




Именно!

513
23 ноября 2005 года
Yurec
228 / / 21.09.2005
Похоже я накосячил - извиняйте.
s2.i не тоже самое что и s2.options.

s2.i - undefined. А работало потому, что, s2.remove(s2.i); удаляет первый элемент списка. Так как мы удаляли все записи мы не заметили ошибки. Если надо удалить определённый пункт - надо так: s2.remove(i);.
513
23 ноября 2005 года
Yurec
228 / / 21.09.2005
PS
В нашем случае надо было писать

for(i=0;i<s2_length;i++)
s2.remove(0);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог