利用eval()打造通用的checkbox全选、全部取消、反选函数升级版+1

简介: 利用eval()打造通用的checkbox全选、全部取消、反选函数升级版+1

之前在写编写“圳品”信息系统中,编写了通用的checkbox全选、全部取消、反选函数,详见:

利用eval()打造通用的checkbox全选、全部取消、反选函数

现在又根据需要增加了几组checkbox,发现通用的checkbox全选、全部取消、反选函数不好使,不够通用了。

拿之前的写的代码分析,很容易就找到了原因:之前的代码做了一个假设,即每组ckeckbox的个数是11个以内,比如这个全选通用函数代码为:

//全选
    function checkAll(s)
    {
        for (i=0; i < 11; i++)
        {
            eval(s)[i].checked = true;
        }
    }

但是新增的checkbox组突破了11个的范围,所以要修改代码了。

由于每组ckeckbox的个数是不固定的,所以最简单的解决办法就是把ckeckbox的个数也作为通过函数的参数传递进去,比如全选通用函数就改为:

//全选
    //s:checkbox名,n:checkbox数量
    function checkAll(s, n)
    {
        for (i=0; i < n; i++)
        {
            eval(s)[i].checked = true;
        }
    }

生成checkbox全选、全部取消、反选按钮的代码也同步修改:

function showCbStateBox(n,i)
{
    document.write(' <input type="button" value="全选" onclick="checkAll(', "'", n, "'",',', i,')" />');
    document.write(' <input type="button" value="全部取消" onclick="uncheckAll(', "'", n, "'",',',i, ')" />');
    document.write(' <input type="button" value="反选" onclick="reverseCheck(', "'", n, "'",',', i,  ')" />');
}

调用语句也做相应的修改,比如:

showCbStateBox("cbArea",aArea.length);


完整的代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta name="Author" content="PurpleEndurer">
  <title>“圳品”信息系统</title>
</head>
<body>
    <div id="divArea">
        县(区): 
  <script>
    //n:checkbox name, i:checkbox number
    function showCbStateBox(n,i)
    {
      document.write(' <input type="button" value="全选" onclick="checkAll(', "'", n, "'",',', i,')" />');
      document.write(' <input type="button" value="全部取消" onclick="uncheckAll(', "'", n, "'",',',i, ')" />');
      document.write(' <input type="button" value="反选" onclick="reverseCheck(', "'", n, "'",',', i,  ')" />');
    }
 
    aArea = new Array(
      "河池",    //0
      "金城江",    //1
      "宜州",    //2
      "罗城",    //3
      "环江",    //4
      "南丹",    //5
      "天峨",    //6
      "东兰",    //7
      "巴马",    //8
      "凤山",    //9
      "都安",    //10
      "大化");    //11
 
    function showAreaChkBox()
    {
      var i;
      for (i = 0; i < aArea.length; i++)
      {
        document.write('<input type="checkbox" checked="true" name="',i,'" >',aArea[i],'</input> ');
          }
      showCbStateBox("cbArea",aArea.length);
    }       
    showAreaChkBox();
  </script>
    </div>

    <div id="divZpProg">
  <strong>认证状态:</strong> 
  <script>
    const aZpProg = new Array("已获评",//0
        "已完成现场评价", //1
        "待现场评价",//2
        "待补充材料", //3
        "未通过评价"//4
    );

    function showZpProgChkBox()
    {
      var i;
       document.write('<input type="checkbox" checked="true" name="cbZpProg0">',aZpProg[0],'</input> ');
      for (i = 1; i < aZpProg.length; i++)
      {
         document.write('<input type="checkbox" name="cbZpProg',i,'">',aZpProg[i],'</input> ');
      }
      showCbStateBox("cbZpProg",aZpProg.length);
    }       
    showZpProgChkBox();
  </script>
    </div>        

    <div id="divCertYear">
        认证时间:
        <script>
            function showCertYearChkBox()
            {
                var i, d = new Date();
                d = d.getFullYear();
                for (i = 2020; i <= d; i++)
            {
                     document.write('<input type="checkbox" checked="true" name="', i, '" >', i, '</input> ');
            }
            showCbStateBox("cbCertYear", i-2020);              
            }  
            showCertYearChkBox();

        </script>
    </div>
 
    <div id="divCol">
        显示信息包含:
        <script>
            var g_aCol = new Array("序号","所属县区","企业名称","产品名称","证书编号","认证时间","有效期","备注");
          
            function showColChkBox()
            {
                var i;
                for (i = 0; i < g_aCol.length; i++)
                {
                     document.write('<input type="checkbox" checked="true" name="',i,'" >',g_aCol[i],'</input> ');
                }
              showCbStateBox("cbCol", g_aCol.length);
      }       
            showColChkBox();
        </script>
    </div>
 
<script>
    var divArea = document.getElementById("divArea");
    var cbArea = divArea.getElementsByTagName("input");
          
    var divCol = document.getElementById("divCol");
    var cbCol = divCol.getElementsByTagName("input");

    var divZpProg = document.getElementById("divZpProg");
    var cbZpProg = divZpProg.getElementsByTagName("input");

 
    var divCertYear = document.getElementById("divCertYear");
    var cbCertYear =  divCertYear.getElementsByTagName("input");
    
//全选,s: checkbox name, n:checkbox number
function checkAll(s, n)
{
  for (i=0; i < n; i++)
  {
    eval(s)[i].checked = true;
  }
}

//全部取消,s: checkbox name, n:checkbox number
function uncheckAll(s, n)
{
  for (i=0; i < n; i++)
  {
    eval(s)[i].checked = false;
  }
}

 //反选,s: checkbox name, n:checkbox number
function reverseCheck(s, n)
{
  for (i=0; i < n; i++)
  {
    eval(s)[i].checked = !eval(s)[i].checked;
  }
}         
</script>
 
</body>
</html>

image.png

相关文章
|
18天前
利用eval()打造通用的checkbox全选、全部取消、反选函数升级版+3
利用eval()打造通用的checkbox全选、全部取消、反选函数升级版+3
|
18天前
利用eval()打造通用的checkbox全选、全部取消、反选函数升级版+2
利用eval()打造通用的checkbox全选、全部取消、反选函数升级版+2
|
18天前
|
JavaScript 前端开发 Serverless
利用eval()打造通用的checkbox全选、全部取消、反选函数
利用eval()打造通用的checkbox全选、全部取消、反选函数
|
18天前
|
JavaScript 前端开发
用JavaScript编程控制网页上checkbox选择状态:全选、全部取消、反选
用JavaScript编程控制网页上checkbox选择状态:全选、全部取消、反选
|
3月前
|
JavaScript 前端开发
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label
121 1
|
4月前
input的Checkbox(复选框)属性具体怎么使用
input的Checkbox(复选框)属性具体怎么使用
144 0
|
JavaScript 索引
jquery 获取或设置radio单选框选中值的方法
jquery 获取或设置radio单选框选中值的方法
606 0
|
JavaScript PHP 数据库
layui框架实战案例(18):保存草稿和单选radio复选框checkbox无focus属性快速聚焦跳转的解决方案
layui框架实战案例(18):保存草稿和单选radio复选框checkbox无focus属性快速聚焦跳转的解决方案
251 0
|
JavaScript 前端开发
Jquery 实现click 选中checkbox 多选(或一键选中全部或取消全部)实例代码
Jquery 实现click 选中checkbox 多选(或一键选中全部或取消全部)实例代码
274 0