<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 onChange='ChangeS2();' MULTIPLE>
<option> Item 1
<option> Item 2
<option> Item 3
<option> Item 4
</select>
<select name="s2" zize=5 MULTIPLE>
</select>
Взаимосвязанные селекты
Проблема вот в чем.
Есть список select1 multiple. Изначально в нем ничего не выбрано. Когда выделяем элемент, он появляется в списке select2, выделяем еще один - он добавляется к первому. Если снимаем в select1 выделение с какого-либо элемента, то этот элемент должен убраться из select2. Т.е. в select2 должны находиться только те элементы, которые в данный момент выбраны в select1.
Код:
Главное не меняй
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 минут с етим пробился тока потом дошло в чём не прав.....
А так вроде все как ты спрашивал.
я немного модифицировал под свои потребности. мне нужно, чтобы в новый список также передавались 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>
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>
но не работает. теперь вообще второй список не формируется
s2.i
тоже самое что и
s2.options
почему?
сорри, провтыкал все работает! спасибо еще раз! аж стыдно мне, все никак не доберусь до JS. А ведь штука-то нужная!
s2.i? т.е. к элементам списка можно обращаться s2.1, s2.2, ... ?
Цитата:
Originally posted by krafty
s2.i? т.е. к элементам списка можно обращаться s2.1, s2.2, ... ?
s2.i? т.е. к элементам списка можно обращаться s2.1, s2.2, ... ?
Именно!
s2.i не тоже самое что и s2.options.
s2.i - undefined. А работало потому, что, s2.remove(s2.i); удаляет первый элемент списка. Так как мы удаляли все записи мы не заметили ошибки. Если надо удалить определённый пункт - надо так: s2.remove(i);.
В нашем случае надо было писать
for(i=0;i<s2_length;i++)
s2.remove(0);