<html>
<head>
<script language="javascript">
<!--
//假如tolen不自加,当选择多个时,只移动多个选项的最后一项,其它都删除(覆盖).
//如选择a\b\c,当移动时,仅有c.
function movelist(from,to){
var fromList=document.myform.elements[from];//文本属性赋值变量
var fromlen=fromList.options.length;//得到leftlist文本框的长度。即3
var tolist=document.myform.elements[to];
var tolen=tolist.options.length;//得到rightlist文本框的长度。即3 var current=fromList.selectedIndex;//这个是多选列表,只要第一个选择项的序号,实例是选择三个,第一个的序号为0。即0
//符合条件的才执行添加和删除选项
while(current>-1){
var o=fromList.options[current];//leftlist列表的第一个选项
var t=o.text;//leftlist列表的第一个选项,返回:a
var v=o.value;//leftlist列表的第一个选项,返回:0
var optionName=new Option(t,v);//新建一个选项,文本为a,值为0
tolist.options[tolen]=optionName;//tolist列表,添加一个选项,其序号为3
tolen++;//假如不自加的话,现在tolen长度依然为3.为什么一个一个添加时,可以正常添加,不会覆盖?而多个选择时,再移动,其仅有一个文本的呢?我的思想,一个也会覆盖的吧,因为是同一个序号,无自加的还是用这个序号的存储位置啦!
fromList.options[current]=null;//在fromlist列表删除选项,删除当前所选。current不是返回为一个数字的吗?如何能删除多个的啊?因为只返回多选列表的第一个选择项的选项序号喔!
current=fromList.selectedIndex;//再次得到fromlist列表的选项序号?不是删除了吗?那就是无选择了? }
}
//--></script>
</head>
<body>
<form name="myform">
<table>
<tr valign="top">
<td>
<select name="leftlist" multiple size="6" style="width:50px;">
<option>a</option>
<option>b</option>
<option>c</option>
</select>
</td>
<td>
<input type="button" name="to" value=" >> " onclick="movelist('leftlist','rightlist')"><p>
<input type="button" name="backto" value=" << " onclick="movelist('rightlist','leftlist')"><p>
</td>
<td>
<select name="rightlist" multiple size="6" style="width:50px">
<option>d</option>
<option>e</option>
<option>f</option>
</td>
</tr>
</table>
</from>
</body>
</html>-----------------------------------------------------------------------------------------
以上代码的结果是:在左边选择了,向右移动,并在左右的选项删除.右边相反.
主要是红色部分不理解的呀`
就是tolist列表的长度自加部分开始到条件判断的结束处!
特别是current=fromlist.selectedIndex;
原文:对于多选列表,它是第一个选择项在选项数组中元序号.
例如我在左边选择两个选项,如b,c
就是返回1的吧!
<head>
<script language="javascript">
<!--
//假如tolen不自加,当选择多个时,只移动多个选项的最后一项,其它都删除(覆盖).
//如选择a\b\c,当移动时,仅有c.
function movelist(from,to){
var fromList=document.myform.elements[from];//文本属性赋值变量
var fromlen=fromList.options.length;//得到leftlist文本框的长度。即3
var tolist=document.myform.elements[to];
var tolen=tolist.options.length;//得到rightlist文本框的长度。即3 var current=fromList.selectedIndex;//这个是多选列表,只要第一个选择项的序号,实例是选择三个,第一个的序号为0。即0
//符合条件的才执行添加和删除选项
while(current>-1){
var o=fromList.options[current];//leftlist列表的第一个选项
var t=o.text;//leftlist列表的第一个选项,返回:a
var v=o.value;//leftlist列表的第一个选项,返回:0
var optionName=new Option(t,v);//新建一个选项,文本为a,值为0
tolist.options[tolen]=optionName;//tolist列表,添加一个选项,其序号为3
tolen++;//假如不自加的话,现在tolen长度依然为3.为什么一个一个添加时,可以正常添加,不会覆盖?而多个选择时,再移动,其仅有一个文本的呢?我的思想,一个也会覆盖的吧,因为是同一个序号,无自加的还是用这个序号的存储位置啦!
fromList.options[current]=null;//在fromlist列表删除选项,删除当前所选。current不是返回为一个数字的吗?如何能删除多个的啊?因为只返回多选列表的第一个选择项的选项序号喔!
current=fromList.selectedIndex;//再次得到fromlist列表的选项序号?不是删除了吗?那就是无选择了? }
}
//--></script>
</head>
<body>
<form name="myform">
<table>
<tr valign="top">
<td>
<select name="leftlist" multiple size="6" style="width:50px;">
<option>a</option>
<option>b</option>
<option>c</option>
</select>
</td>
<td>
<input type="button" name="to" value=" >> " onclick="movelist('leftlist','rightlist')"><p>
<input type="button" name="backto" value=" << " onclick="movelist('rightlist','leftlist')"><p>
</td>
<td>
<select name="rightlist" multiple size="6" style="width:50px">
<option>d</option>
<option>e</option>
<option>f</option>
</td>
</tr>
</table>
</from>
</body>
</html>-----------------------------------------------------------------------------------------
以上代码的结果是:在左边选择了,向右移动,并在左右的选项删除.右边相反.
主要是红色部分不理解的呀`
就是tolist列表的长度自加部分开始到条件判断的结束处!
特别是current=fromlist.selectedIndex;
原文:对于多选列表,它是第一个选择项在选项数组中元序号.
例如我在左边选择两个选项,如b,c
就是返回1的吧!
var o=fromList.options[current];//leftlist列表的第一个选项
var t=o.text;//leftlist列表的第一个选项,返回:a
var v=o.value;//leftlist列表的第一个选项,返回:0
var optionName=new Option(t,v);//新建一个选项,文本为a,值为0
tolist.options[tolen]=optionName;//tolist列表,添加一个选项,其序号为3
tolen++;//假如不自加的话,现在tolen长度依然为3.为什么一个一个添加时,可以正常添加,不会覆盖?而多个选择时,再移动,其仅有一个文本的呢?我的思想,一个也会覆盖的吧,因为是同一个序号,无自加的还是用这个序号的存储位置啦!
fromList.options[current]=null;//在fromlist列表删除选项,删除当前所选。current不是返回为一个数字的吗?如何能删除多个的啊?因为只返回多选列表的第一个选择项的选项序号喔!
current=fromList.selectedIndex;//再次得到fromlist列表的选项序号?不是删除了吗?那就是无选择了? } 这是用循环来进行的添加和删除 fromList.options[current]=null;// 删除当前已经添加到另一个列表中的值current=fromList.selectedIndex;// 如果是多选的话 将会得到下一个被选中的值
//但如果已经没有被选择项 将给current赋值为-1
//退出循环
未完全理解的啊~`
tolen++;//这是我模糊中写下以下的,两种情况,1,自加情况,会不会是这样,当选择多个时,第一个符合时(选择右边,向左添加),向左添加,再在右边删除,再检多个的第二个(现已变成第一个了),符合条件,再向左添加,右边删除,真到无选择了.
2,无自加情况,这里是右边向左移动,d,e,f都是添加到同一个选项,先添加d,再在删除d,再添加e到选项4,这时,e覆盖了d,再删除,最后添加f到选项4,再删除右边的值及文本.这么说只有把所选的操作完毕时,再重新得到选项长度.而选择一个时,又无自加,也能得到最新的选项长度,因为已退出判断,能及时获得最新列表对象的选项的长度.总的来说,当无自加时,一个一个移动,不会删除,那是因为添加一个选项和删除时,都会得到新的长度.
以上可能写不是很好,得出心得,却不能熟悉的运用呀`~