在GIIS项目中有一个很帅的需求,先看截图:
需求:(下面的功能用JS实现)
1、点击Select All CheckBox, 如果Checked = true, 则下面的CheckBoxList要全部选中,并且Default Value的DropDownList中添加下面CheckBoxList的所有Item, 否则,如果Checked = false, CheckBoxList全部不选,DropDownList清空所有Item。
2、点选CheckBoxList的Item, 如果是选中的,就往DropDownList中添加这个Item并选中,如果是不选中,就从DropDownList删除这个Item, 并且要根据CheckBoxList是否全部选中来决定Select All的选中状态。
解决方法:
因为在前台用JS读不到CheckBoxList每个Item的Value和Text, 所以后台给CheckBoxList添加ListValue和ListText两个属性,把所有Item的Value和Text聚合起来,然后在前台读取。每次点击CheckBoxList的一个Item,都循环把所有Item的选中状态按0、1标志,存入一个变量,最后再根据这个标志来决定DropDownList应该添加那些Item。具体请看代码和注释,有更好的解决方法请大家不吝赐教哦。
前台代码:
JS代码:
//根据Select All的选中状态,循环处理CheckBoxList的每个Item
for (var i=0; i< checkBoxList.length; i++)
{
if (checkBoxList[i].id.indexOf(checkBoxItemID) >= 0)
{
checkBoxList[i].checked = obj.checked;
}
}
//根据Select All的选中状态,循环把后台添加的ListValue和ListText属性添加给DropDownList
//每次点击CheckBoxList的一个Item,都循环把所有Item的选中状态按0、1标志,存入一个变量,最后再根据这个标志来决定DropDownList应该添加那些Item
for (var i=0; i< checkBoxList.length; i++)
{
if (checkBoxList[i].id.indexOf(checkBoxItemID) >= 0)
{
if(checkBoxList[i].checked)
{
strCheckChecked = strCheckChecked + "1" + ",";
}
else
{
strCheckChecked = strCheckChecked + "0" + ",";
}
}
}
document.getElementById(dropDownListID).innerText = "";
arrCheckChecked = RTrim(strCheckChecked).split(',');
for(var j = 0; j < count; j++)
{
if(arrCheckChecked[j] == "1")
{
var tOption = document.createElement("Option");
tOption.text=arrListText[j];
tOption.value=arrListValue[j];
document.all(dropDownListID).add(tOption);
}
}
if(strCheckChecked.indexOf("0") <0)
{
document.getElementById(selectAllID).checked = true;
}
else
{
document.getElementById(selectAllID).checked = false;
}
if(checkBoxID.checked)
{
document.all(dropDownListID).value =checkValue;
}
}
![[GIIS]CheckBoxList 之 Select All [GIIS]CheckBoxList 之 Select All](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMMmhwTkMxcFltMXpkall3TkM5TmVVSmxaWEl2U1cxaFoyVnpMMDkxZEd4cGJtbHVaMGx1WkdsallYUnZjbk12VG05dVpTNW5hV1k9)
function RTrim(str)
{
var i;
for(i=str.length-1;i>=0;i--)
{
if(str.charAt(i)!=","&&str.charAt(i)!=",")break;
}
str=str.substring(0,i+1);
return str;
} ![[GIIS]CheckBoxList 之 Select All [GIIS]CheckBoxList 之 Select All](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMMmhwTkMxcFltMXpkall3TkM5TmVVSmxaWEl2U1cxaFoyVnpMMDkxZEd4cGJtbHVaMGx1WkdsallYUnZjbk12VG05dVpTNW5hV1k9)
</script>
后台代码:
//因为在前台用JS读不到CheckBoxList每个Item的Value和Text, 所以后台添加ListValue和ListText两个属性,把所有Item的Value和Text聚合起来,然后在前台读取