在web的翻页中有很多情况下有checkbox控件,如何在选择当前页的checkbox后翻页回来还能保留状态且记录多个页面选择的checkbox的value是在web开发中常见的问题。
这次开发asp项目有遇到这个问题,写了一个小的demo用了hidden控件和js代码来实现,对每页checkbox数量不多的情况效率应该还不错,但是太多了js遍历控件可能会导致性能下降。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<SCRIPT LANGUAGE="JavaScript">
<!--
//設置選擇框狀態,可在頁面初始化的時候調用
function setCheckBox(objchk,objhdn){
var i,j;
var arrValue;
if (objhdn.value != "" || objhdn.value != null){
arrValue = objhdn.value.split(",");
}
for(i=0;i<objchk.length;i++){
for(j=0;j<arrValue.length;j++){
if (objchk[i].value == arrValue[j]){
objchk[i].checked = true;
}
}
}
}
//保存選擇框狀態,可在提交頁面的時候調用
function keepCheckBox(objchk,objhdn){
var i,j;
var arrValue;
if (objhdn.value != "" || objhdn.value != null){
arrValue = objhdn.value.split(",");
}
for(i=0;i<objchk.length;i++){
if (objchk[i].checked == true){
if (isExist(arrValue,objchk[i].value) == false){
arrValue.push(objchk[i].value);
}
}else{
if (isExist(arrValue,objchk[i].value) == true){
Remove(arrValue,objchk[i].value);
}
}
}
objhdn.value = arrValue.join(",");
alert(objhdn.value);
document.all.form1.submit();
}
//判斷數組中是否存在value
function isExist(objArr,value){
var i ;
for(i=0;i<objArr.length;i++){
if (objArr[i] == value){
return true;
}
}
return false;
}
//刪除數組中的元素
function Remove(objArr,value){
var i ;
for(i=0;i<objArr.length;i++){
if (objArr[i] == value){
objArr.splice(i,1);
}
}
}
//-->
</SCRIPT>
<SCRIPT FOR = form1 EVENT = onsubmit>
alert("aaa");
</script>
<body>
<FORM name="form1" METHOD=POST ACTION="" >
<INPUT TYPE="hidden" name="hdnChk" value="1,3,8,9">
<TABLE>
<TR>
<TD>1</TD>
<TD><INPUT TYPE="checkbox" NAME="chk" value="1"></TD>
</TR>
<TR>
<TD>2</TD>
<TD><INPUT TYPE="checkbox" NAME="chk" value="2"></TD>
</TR>
<TR>
<TD>3</TD>
<TD><INPUT TYPE="checkbox" NAME="chk" value="3"></TD>
</TR>
<TR>
<TD>4</TD>
<TD><INPUT TYPE="checkbox" NAME="chk" value="4"></TD>
</TR>
</TABLE>
<input type="button" name="btn" value="prew" onclick="javascript:setCheckBox(document.all.chk,document.all.hdnChk)">
<input type="button" name="btn" value="next" onclick="javascript:keepCheckBox(document.all.chk,document.all.hdnChk)">
<INPUT TYPE="submit" value="submit">
</FORM>
</body>