题目:在窗体中有两个多选列表,用户可以从左侧列表中选择任意项,添加到右侧列表中。反之亦然。如下:
在窗体中有两个多选列表,用户可以从左侧列表中选择任意项,添加到右侧列表中。反之亦然。
此问题需用到选择框脚本的一些关键属性:
add(newOption,relOption):向控件中插入新的<option>元素,其位置在置顶项(relOption)之前,不指定relOption就添加到最后;
options:控件中所有<option>元素的集合;
remove(index):移除给定位置的选项;
selectedIndex:当前选择项的索引,没选时值为-1,多远时只保存选项中的第一个索引;
selected:值为布尔值,表示选中未选中
第一次思路:
1、取得select1 中选择的项,并把index值存入新的数组,获得被选择的项数。
var form1 = document.forms["form1"]; var select1 = form1.elements["select1"]; var select2 = form1.elements["select2"]; var optArr = [];//新建空数组 if(select1.options.length == 0) return false; for(i=0;i
2、循环第一步获得的index数组,用selet2.appendChild(select1.options[index]),添加左边的项到右边;
for(i=0,var x = optArr.length;i
实际代码为:
无标题文档 在窗体中有两个多选列表,用户可以从左侧列表中选择任意项,添加到右侧列表中。反之亦然。
这种方法有个问题,就是单选的时候没有问题,多选的时候就有问题了(移动的项和选择的项不一样),查了下代码,原来appendChild移除select1的项以后,select1本身的index索引发生了变化,而循环的时候是按照原来的所以循环的,所以不对!
第二次思路:想到用add()与remove()方法
for(i=0;i
这样其实还用到了最开始的循环,结果同第一次结果一样,使用remove() //select1.options[i] = null; 同样会改变元options的下标值,不行
第三种思路:利用selectedIndex的值来判断,由于selectedIndex在没有选择项的时候值为-1,而且selectedIndex的值始终为第一项的值,所以判断selectedIndex的值来移动删除相关项:
function sel(select1,select2){//select1 为移除窗口 select2为移动到的窗口 var select1 = form1.elements[select1]; var select2 = form1.elements[select2]; while(select1.selectedIndex > -1){ //alert(select1.selectedIndex); var newOption = document.createElement("option"); newOption.value = select1[select1.selectedIndex].value; newOption.text = select1[select1.selectedIndex].text; select2.add(newOption); select1.remove(select1.selectedIndex); }}
全部代码:
无标题文档 在窗体中有两个多选列表,用户可以从左侧列表中选择任意项,添加到右侧列表中。反之亦然。
此时左右移动可以正常执行,如果你还有其它方法请留言,感激不近!