Layui table方法渲染动态禁用复选框

根据sex判断,不为男时,禁止勾选,页面如下图所示,

 

当页面只有一个复选框时,隐藏第一列:页面如下图所示:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <title>layui在线调试</title>
  <link rel="stylesheet" href="//res.layui.com/layui/dist/css/layui.css?t=1598935358933" media="all">
  <style>
    body{margin: 10px;}
    .demo-carousel{height: 200px; line-height: 200px; text-align: center;}
    .layui-table-view{width: fit-content;}
  </style>
</head>
<body>
 
<table class="layui-hide" id="test" lay-filter="test"></table>
<script type="text/html" id="barDemo">
  <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="hideEv">隐藏</a>
  <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>


  <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script src="//res.layui.com/layui/dist/layui.js?t=1598935358933"></script>
<script>

layui.use(['laypage', 'layer', 'table', 'form'], function(){
  var laypage = layui.laypage //分页
  ,layer = layui.layer //弹层
  ,table = layui.table //表格
  ,form = layui.form
  
  //执行一个 table 实例
  table.render({
    elem: '#test',
    id: 'test'
    ,height: 420
    ,url: '/demo/table/user/' //数据接口
    ,title: '用户表'
    ,page: true //开启分页
   ,toolbar: 'default' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
    ,cols: [[ //表头
      {
                title: "<input type='checkbox' id='siam_all' name='siam_all' title='' lay-skin='primary' lay-filter='siam_all'> ",
	            templet: function (d) {
                    if(d.sex == '男'){//给性别为男的添加复选框
                        return '<input type="checkbox" name="siam_one" title="" lay-skin="primary" data-id = "'+d.id+'" lay-filter="siam_one">';
                    }else return "";
                }
            },     
     {field: 'sex', title: '性别',  sort: true}
      ,{field: 'score', title: '评分', sort: true, totalRow: true}
      ,{field: 'city', title: '城市'} 
      ,{field: 'classify', title: '职业'}
      ,{field: 'wealth', title: '财富'}
      ,{field: 'score', title: '评分',  sort: true, totalRow: true}
      ,{fixed: 'right', align:'center', toolbar: '#barDemo'}
    ]],done:function () {
            //当前页只有一个复选框时,隐藏复选框列
            var len = $("input[name='siam_one']").length;
            if(len <= 1){//数据渲染完,若只有一个复选框,隐藏第一列
                $(".layui-table-col-special:even").hide();
                $(".layui-table-view").css("width","fit-content");              
            }
}
  });  
  //监听头工具栏事件
  table.on('toolbar(test)', function(obj){
    var ids = [];
    $.each($("input[name=siam_one]:checked"), function (i, value) {
      ids[i] = $(this).attr("data-id");  // 如果需要获取其他的值 需要在模板中把值放到属性中 然后这里就可以拿到了
    });
    switch(obj.event){
      case 'add':
        layer.msg('添加');
      break;
      case 'update':
        if(ids.length === 0){
          layer.msg('请选择一行');
        } else if(ids.length > 1){
          layer.msg('只能同时编辑一个');
        } else {
          layer.alert('编辑 [id]:'+ ids[0]);
        }
      break;
      case 'delete':
        if(ids.length === 0){
          layer.msg('请选择一行');
        } else {
          layer.msg('删除');
        }
      break;
    };
  });
  //全选
      form.on("checkbox(siam_all)", function () {
          var status = $(this).prop("checked");
          $.each($("input[name=siam_one]"), function (i, value) {
              $(this).prop("checked", status);
          });
          form.render();
      });
      //有一个未选中全选取消选中
      form.on('checkbox(siam_one)', function () {
          $.each($("input[name=siam_one]"), function () {
             if($(this).prop("checked") == false){
                 $("#siam_all").prop("checked", false);
                 form.render('checkbox');
                 return false;
             }
          });
          //如果都勾选上,勾上全选按钮
          var checkLen = $("input[name=siam_one]").length;
          $.each($("input[name=siam_one]"), function () {
              if($(this).prop("checked") == true){
                  checkLen--;
              }
          });
          if(checkLen == 0){
              $("#siam_all").prop("checked", true);
              form.render('checkbox');
          }
      });
  //监听行工具事件
  table.on('tool(test)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
    var data = obj.data //获得当前行数据
    ,layEvent = obj.event; //获得 lay-event 对应的值
    if(layEvent === 'hideEv'){
       $(obj.tr.selector).hide();
       //当前页只有一个复选框时,隐藏复选框列  
     var len = $(".layui-table-col-special:visible").find("input[name=siam_one]").length;  
             if(len <= 1){
                $(".layui-table-col-special:even").hide();
                $(".layui-table-view").css("width","fit-content");
            }
            
    } else if(layEvent === 'del'){
      layer.confirm('真的删除行么', function(index){
        obj.del(); //删除对应行(tr)的DOM结构
        layer.close(index);
        //向服务端发送删除指令
      });
    } else if(layEvent === 'edit'){
      layer.msg('编辑操作');
    }
  });  
  
  
  //分页
  laypage.render({
    elem: 'pageDemo' //分页容器的id
    ,count: 100 //总页数
    ,skin: '#1E9FFF' //自定义选中色值
    //,skip: true //开启跳页
    ,jump: function(obj, first){
      if(!first){
        layer.msg('第'+ obj.curr +'页', {offset: 'b'});
      }
    }
  });
 
});
</script>
</body>
</html>        
        

测试网址:https://www.layui.com/demo/,可以直接将代码复制到调试预览中测试。按需复制

注意点:

  1. 添加自定义复选框列;
  2. 改写全选和单选复选框事件,使用form.render()重新渲染;
  3. 使用ids直接获取复选框选中的值:
    var ids = [];
    $.each($("input[name=siam_one]:checked"), function (i, value) {
        ids[i] = $(this).attr("data-id");  
    });
  4.  由于第一列和最后一列都是特殊列,隐藏第一列:$(".layui-table-col-special:even").hide();
    1. 隐藏一列后,最后会出现空白列,$(".layui-table-view").css("width","fit-content");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值