js怎么实现能多选的下拉框,点一个选中一个,反选取消选择?我的程序有问题,超过两条选择就不对了!
<script>//选中项数组varselect=[];//根据value,更改项的选中状态functionchangeOption(opt,val,isSelect){...
<script>
//选中项数组
var select = [];
//根据value,更改项的选中状态
function changeOption(opt,val,isSelect) {
for (var i = 0; i < opt.length; i++) {
if (opt.options[i].value == val) {
opt.options[i].selected = isSelect;
break;
}
}
}
function OnClick() {
var i_ts_desc = document.getElementById("i_ts_desc");
//获取当前选择Value
var newVal = i_ts_desc.options[i_ts_desc.selectedIndex].value;
for (var i = 0; i < select.length; i++) {
//如果Value在数组中,即反选了,就不选中它。
if (select[i] == newVal) {
//不选中
changeOption(i_ts_desc, newVal, false);
//再将原来的项选中
for (var k = 0; k < select.length; k++) {
if (select[k] != newVal)
changeOption(i_ts_desc, select[k], true);
}
//重新填充已选中的项的数组
select = [];
for (var j = 0; j < i_ts_desc.options.length; j++) {
if (i_ts_desc.options[j].selected == true) {
select.push(i_ts_desc.options[j].value);
}
}
return;
}
}
//选中,然后重新填充已选中的项的数组
select.push(newVal);
for (var i = 0; i < select.length; i++) {
changeOption(i_ts_desc, select[i], true);
}
}
</script>
<select id="i_ts_desc" multiple="multiple" onclick="OnClick();" >
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
<option value="F">F</option>
</select> 展开
//选中项数组
var select = [];
//根据value,更改项的选中状态
function changeOption(opt,val,isSelect) {
for (var i = 0; i < opt.length; i++) {
if (opt.options[i].value == val) {
opt.options[i].selected = isSelect;
break;
}
}
}
function OnClick() {
var i_ts_desc = document.getElementById("i_ts_desc");
//获取当前选择Value
var newVal = i_ts_desc.options[i_ts_desc.selectedIndex].value;
for (var i = 0; i < select.length; i++) {
//如果Value在数组中,即反选了,就不选中它。
if (select[i] == newVal) {
//不选中
changeOption(i_ts_desc, newVal, false);
//再将原来的项选中
for (var k = 0; k < select.length; k++) {
if (select[k] != newVal)
changeOption(i_ts_desc, select[k], true);
}
//重新填充已选中的项的数组
select = [];
for (var j = 0; j < i_ts_desc.options.length; j++) {
if (i_ts_desc.options[j].selected == true) {
select.push(i_ts_desc.options[j].value);
}
}
return;
}
}
//选中,然后重新填充已选中的项的数组
select.push(newVal);
for (var i = 0; i < select.length; i++) {
changeOption(i_ts_desc, select[i], true);
}
}
</script>
<select id="i_ts_desc" multiple="multiple" onclick="OnClick();" >
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>
<option value="F">F</option>
</select> 展开
1个回答
展开全部
Hi,你的操作就是当已经选择过的情况下你需要删除掉数组的相应值。
我帮你改写了一下,数组值需要存储选框的下标就可以了的。
<script language="javascript">
var sel = [];
function OnClick() {
var i_ts_desc = document.getElementById("i_ts_desc");
var index = i_ts_desc.selectedIndex;
var iHas = -1;
sel.sort();
for (var i = 0; i < sel.length; i++) {
if (sel[i] == index) {
iHas = i;
} else {
i_ts_desc[sel[i]].selected = true;
}
}
if (iHas == -1) {
sel.push(index);
i_ts_desc[index].selected = true;
} else {
sel.splice(iHas, 1);
i_ts_desc[index].selected = false;
}
}
</script>
<select id="i_ts_desc" multiple="multiple" onclick="OnClick();" >
<option value="A">0</option>
<option value="B">1</option>
<option value="C">2</option>
<option value="D">3</option>
<option value="E">4</option>
<option value="F">5</option>
</select>
我帮你改写了一下,数组值需要存储选框的下标就可以了的。
<script language="javascript">
var sel = [];
function OnClick() {
var i_ts_desc = document.getElementById("i_ts_desc");
var index = i_ts_desc.selectedIndex;
var iHas = -1;
sel.sort();
for (var i = 0; i < sel.length; i++) {
if (sel[i] == index) {
iHas = i;
} else {
i_ts_desc[sel[i]].selected = true;
}
}
if (iHas == -1) {
sel.push(index);
i_ts_desc[index].selected = true;
} else {
sel.splice(iHas, 1);
i_ts_desc[index].selected = false;
}
}
</script>
<select id="i_ts_desc" multiple="multiple" onclick="OnClick();" >
<option value="A">0</option>
<option value="B">1</option>
<option value="C">2</option>
<option value="D">3</option>
<option value="E">4</option>
<option value="F">5</option>
</select>
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询