博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Js选择框脚本 移动操作select 标签中的 option 项的操作事项
阅读量:5329 次
发布时间:2019-06-14

本文共 2080 字,大约阅读时间需要 6 分钟。

题目:在窗体中有两个多选列表,用户可以从左侧列表中选择任意项,添加到右侧列表中。反之亦然。如下:

在窗体中有两个多选列表,用户可以从左侧列表中选择任意项,添加到右侧列表中。反之亦然。

此问题需用到选择框脚本的一些关键属性:

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);		}}

全部代码:

无标题文档

在窗体中有两个多选列表,用户可以从左侧列表中选择任意项,添加到右侧列表中。反之亦然。

  

  

 此时左右移动可以正常执行,如果你还有其它方法请留言,感激不近!

转载于:https://www.cnblogs.com/NNUF/archive/2011/12/31/2308782.html

你可能感兴趣的文章
管道,数据共享,进程池
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
php中的isset和empty的用法区别
查看>>
把word文档中的所有图片导出
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
加固linux
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
js千分位处理
查看>>
字符串类型的相互转换
查看>>
基础学习:C#中float的取值范围和精度
查看>>
web前端面试题2017
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
关于 linux 的 limit 的设置
查看>>
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>