layui数据表格checkbox设置部分不可选

简介: 在layui数据表格中设置了字段为type:checkbox 但是想要实现部分不显示,不可选的功能。

问题


在layui数据表格中设置了字段为type:checkbox 但是想要实现部分不显示,不可选的功能。


error_icon.png


layui内置没有该功能,所以只能自己实现。


使用templet实现


table.render({
    elem: '#junTable',
    url: '',
    cols: [[
        {
            templet: "#checkbd",
            title: "<input type='checkbox' name='siam_all' title='' lay-skin='primary' lay-filter='siam_all'> ",
            width: 60,
        }
        , {
            field: 'z_id',
            title: 'id'
        }
    ]],
    page: true,
    limit: 10
});
<script type="text/html" id="checkbd">
    {{#  if (d.can_fabu === 1){ }}// 这里是判断要不要显示的条件
    <input type="checkbox" name="siam_one" title="" lay-skin="primary" data-id = "{{ d.z_id }}">
    {{#  } }}
</script>
<style>
    .laytable-cell-checkbox .layui-disabled.layui-form-checked i {
        background: #fff !important;
    }
</style>


到这里就可以部分数据不显示复选框了,但是全选功能和获取id的功能还是不正常


全选功能


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();
});


获取选中数据


var ids = [];
$.each($("input[name=siam_one]:checked"), function (i, value) {
    ids[i] = $(this).attr("data-id");  // 如果需要获取其他的值 需要在模板中把值放到属性中 然后这里就可以拿到了
});


使用done函数禁用


这是网上的做法,但是有瑕疵,全选不可用,并且不可选状态和可选状态的复选框样式很接近,建议重写不可选的样式 (参考上面的)


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>layui</title>
        <meta name="renderer" content="webkit" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
        <link rel="stylesheet" href="https://res.layui.com/layui/dist/css/layui.css" media="all" />
        <!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
    </head>
    <body>
        <div style="margin-bottom: 5px;">
            <div id="table-main">
<span class="layui-btn" id="getselect">获取选中行</span>
                <table class="layui-table" id="idTest" lay-filter="demo"></table>
            </div>
            <script type="text/html" id="barDemo">
                < a class = "layui-btn layui-btn-primary layui-btn-mini"
                lay - event = "detail" > 查看 < /a>
            </script>
            <script src="https://res.layui.com/layui/dist/layui.all.js" charset="utf-8"></script>
            <!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
            <script>
                layui.use(['table', 'jquery', 'form', 'layer'], function() {
                    var table = layui.table;
                    var $ = layui.jquery;
                    var form = layui.form;
                    var layer = layui.layer;
                    var tableIns = table.render({ //其它参数在此省略
                        elem: '#idTest',
                        id: 'idTest',
                        url: 'https://www.layui.com/demo/table/user/', // 注意:如果你直接复制所有代码到本地,数据请求需要本地返回数据
                        cols: [
                            [{
                                    checkbox: true,
                                    fixed: true
                                },
                                {
                                    field: 'id',
                                    width: 80,
                                    sort: true,
                                    fixed: true,
                                    title: 'ID'
                                },
                                {
                                    fixed: 'right',
                                    width: 160,
                                    align: 'center',
                                    toolbar: '#barDemo'
                                }
                            ]
                        ],
                        where: {}, //如果无需传递额外参数,可不加该参数
                        limits: [10, 15, 20, 40, 60, 80],
                        limit: 10,
                        page: true, //开启分页
                        done: function(res, curr, count) {
                            var data = res.data;
                            var allck = true;
                            for (var item in data) {
                                if (data[item].score == 57) { //关键点如果data中score包含57那么就不能全选
                                    allck = false;
                                }
                                break;
                            }
                            if (!allck) {
                                $(".layui-table-header").find("input[name = 'layTableCheckbox'][lay-filter='layTableAllChoose']").each(function() {
                                    $(this).attr("disabled", 'disabled').next().removeClass("layui-form-checked");
                                    form.render('checkbox');
                                });
                            }
                            var i = 0;
                            $(".layui-table-body.layui-table-main").find("input[name='layTableCheckbox']").each(function() {
                                if (res.data[i].score == 57) { //关键点如果当前行数据中score包含57那么就不可选
                                    $(this).attr("disabled", 'disabled').removeAttr("checked");
                                    form.render('checkbox');
                                }
                                i++;
                            });
                            i = 0;
                            $(".layui-table-fixed.layui-table-fixed-l").find(".layui-table-body").find("input[name='layTableCheckbox']").each(function() {
                                if (res.data[i].score == 57) { //关键点如果当前行数据中score包含57那么就不可选
                                    $(this).attr("disabled", 'disabled').removeAttr("checked");
                                    form.render('checkbox');
                                }
                                i++;
                            });
                        }
                    });
                    //监听表格复选框选择
                    table.on('checkbox(demo)', function(obj) {
                        console.log(obj)
                    });
                    $("#getselect").click(function() {
                        var checkStatus = table.checkStatus('idTest'); //test即为基础参数id对应的值
                        layer.alert(JSON.stringify(checkStatus.data));
                    });
                });
            </script>
        </div>
    </body>
</html>
目录
相关文章
|
JavaScript
Layui数据表格嵌套文件上传按钮
Layui数据表格嵌套文件上传按钮
206 0
layUI数据表格可编辑扩展下拉框
layUI数据表格可编辑扩展下拉框
189 0
|
JavaScript Java 数据格式
Layui数据表格(table)前后台交互
Layui数据表格(table)前后台交互
572 0
|
JavaScript
Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点
Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点
360 0
【Layui】获取下拉框的值
【Layui】获取下拉框的值
656 0
【Layui】获取下拉框的值
【Layui】Layui下select下拉框不显示或没有效果
【Layui】Layui下select下拉框不显示或没有效果
|
6月前
|
JSON 前端开发 JavaScript
layui-数据表格的实现
`layui`是一个前端UI框架,本文档介绍了如何使用layui创建数据表格。首先展示了三张截图来预览效果,接着讲解了下载layui资源包并导入到项目中的步骤。然后,在新建的web项目中引入layui的CSS和JS文件。文档提供了模拟的JSON数据来展示表格内容。接下来,详细说明了数据表格的实现,包括注意事项和代码实现,强调了`table`标签的`id`与`script`中`elem`的匹配。此外,文档还涵盖了监听头部工具栏和工具条事件的方法,并展示了弹出层的实现,用于添加和编辑表格数据。最后,给出了完整的HTML源码示例。
120 0
LayUI数据表格复选框显示不居中问题
LayUI数据表格复选框显示不居中问题
|
数据格式
layui数据表格
layui数据表格
55 0