【Layui】------ Layui Table 点击行选中示例代码

本文介绍了一种在layuiTable中实现行点击自动选中对应checkbox的方法,通过监听表格行的点击事件,找到对应的checkbox并触发其点击事件,实现行选中状态的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

layui table 点击行选中实例


    //单击行勾选checkbox事件
    $(document).on("click", ".layui-table-body table.layui-table tbody tr", function () {
        var index = $(this).attr('data-index');
        var tableBox = $(this).parents('.layui-table-box');
        //存在固定列
        if (tableBox.find(".layui-table-fixed.layui-table-fixed-l").length > 0) {
            tableDiv = tableBox.find(".layui-table-fixed.layui-table-fixed-l");
        } else {
            tableDiv = tableBox.find(".layui-table-body.layui-table-main");
        }
        var CheckLength = tableDiv.find("tr[data-index=" + index + "]").find(
            "td div.layui-form-checked").length;
      
        var checkCell = tableDiv.find("tr[data-index=" + index + "]").find(
            "td div.laytable-cell-checkbox div.layui-form-checkbox I");
        if (checkCell.length > 0) {
            checkCell.click();
        }
    });

    $(document).on("click", "td div.laytable-cell-checkbox div.layui-form-checkbox", function (e) {
        e.stopPropagation();
    });

 

<think>根据用户的问题,用户希望使用Layui实现表格列筛功能,即允许用户动态显示或隐藏表格的列。结合提供的引用信息,特别是引用[1]、[3]和[5],我们可以通过以下步骤实现: 1. 在表格初始化时,为每一列设置一个`hide`属性,该属性控制列初始是否隐藏。我们可以通过本地存储(如localStorage)来保存用户的列筛状态,这样刷新页面后不会重置。 2. 使用Layui的`table`模块的`init`方法初始化表格,并在列配置中设置`hide`属性。 3. 监听列筛事件(如点击一个按钮弹出列择菜单),当用户择显示或隐藏某一列时,更新表格的列配置,并保存当前列显示状态到本地存储。 4. 在表格初始化时,从本地存储读取列显示状态,并应用到列配置中。 下面是一个具体的实现示例: ### 步骤1:HTML结构 ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Layui表格列筛</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layui@2.6.8/dist/css/layui.css"> </head> <body> <div class="layui-card"> <div class="layui-card-header"> <button class="layui-btn" id="columnFilter">列筛</button> </div> <div class="layui-card-body"> <table id="demo" lay-filter="test"></table> </div> </div> <script src="https://cdn.jsdelivr.net/npm/layui@2.6.8/dist/layui.js"></script> <script> // 下面的JavaScript代码将写在这里 </script> </body> </html> ``` ### 步骤2:JavaScript代码 ```javascript layui.use(['table', 'jquery', 'layer'], function(){ var table = layui.table; var $ = layui.jquery; var layer = layui.layer; // 从本地存储获取列显示状态,如果没有则使用默认(全部显示) var getColumnStatus = function() { var status = localStorage.getItem('tableColumnStatus'); if (status) { return JSON.parse(status); } return null; }; // 保存列显示状态到本地存储 var saveColumnStatus = function(status) { localStorage.setItem('tableColumnStatus', JSON.stringify(status)); }; // 初始化列配置 var initColumns = function() { var columns = [ {field: 'id', title: 'ID', width: 80, sort: true}, {field: 'username', title: '用户名', width: 120}, {field: 'email', title: '邮箱', width: 200}, {field: 'sex', title: '性别', width: 80}, {field: 'city', title: '城市', width: 100}, {field: 'sign', title: '签名', width: 200}, {field: 'experience', title: '积分', width: 100, sort: true} ]; // 尝试从本地存储获取列状态 var columnStatus = getColumnStatus(); if (columnStatus) { // 根据存储的状态设置列的hide属性 columns.forEach(function(col, index) { // 如果该列在存储的状态中存在,则设置hide if (columnStatus[col.field] !== undefined) { col.hide = columnStatus[col.field]; } }); } return columns; }; // 渲染表格 table.render({ elem: '#demo', height: 'full-100', cols: [initColumns()], data: [ // 示例数据 {id: 1, username: '张三', email: 'zhangsan@example.com', sex: '男', city: '北京', sign: '签名1', experience: 100}, {id: 2, username: '李四', email: 'lisi@example.com', sex: '女', city: '上海', sign: '签名2', experience: 200}, {id: 3, username: '王五', email: 'wangwu@example.com', sex: '男', city: '广州', sign: '签名3', experience: 300} ], page: true }); // 列筛按钮点击事件 $('#columnFilter').click(function() { var columns = initColumns(); var content = []; columns.forEach(function(col) { content.push('<input type="checkbox" name="column" value="' + col.field + '" title="' + col.title + '"' + (col.hide ? '' : ' checked') + '>'); }); layer.open({ type: 1, title: '列筛', content: '<div style="padding: 20px;">' + content.join('<br>') + '</div>', btn: ['确定', '取消'], area: ['300px', '300px'], yes: function(index, layero) { var columnStatus = {}; $('input[name="column"]:checked').each(function() { columnStatus[$(this).val()] = false; // 选中表示不隐藏 }); $('input[name="column"]:not(:checked)').each(function() { columnStatus[$(this).val()] = true; // 未选中表示隐藏 }); // 保存列状态 saveColumnStatus(columnStatus); // 重新渲染表格 table.reload('demo', { cols: [initColumns()] }); layer.close(index); } }); }); }); ``` ### 说明 1. **本地存储**:使用`localStorage`存储列显示状态,键为`tableColumnStatus`,值为一个对象,对象的属性是列字段名,值为布尔值(`true`表示隐藏,`false`表示显示)。 2. **初始化列**:在`initColumns`函数中,从本地存储获取列状态,并应用到列配置的`hide`属性上。 3. **列筛弹窗**:点击“列筛”按钮,弹出层,显示所有列的复框,已显示的列会被勾。用户勾或取消勾后,点击确定,更新列状态并保存到本地存储,然后重载表格。 这样,即使用户刷新页面,列的显示状态也会被保留。 ### 注意事项 - 本地存储有大小限制(一般为5MB),且只存储字符串,所以使用`JSON.stringify`和`JSON.parse`进转换。 - 列字段名(`field`)必须唯一,因为存储时以字段名为键。 - 如果表格列很多,可以考虑在弹窗中使用更友好的多组件,但这里为了简单使用复框。 ### 相关问题 1. 如何实现Layui表格的列筛状态在不同页面间共享? 2. 除了本地存储,还有哪些方法可以持久化列筛状态? 3. Layui表格如何实现复杂的列筛(如多级表头)?</think>### Layui表格列筛功能实现指南 在Layui中实现表格列筛功能(允许用户动态显示/隐藏列),需要结合本地存储保存用户的择状态。以下是具体实现步骤: #### 1. 基本表格初始化 ```javascript layui.use('table', function(){ var table = layui.table; // 初始化表格 table.render({ elem: '#dataTable', cols: [[ {field: 'id', title: 'ID', width: 80}, {field: 'name', title: '姓名', width: 120, hide: getColumnHide("name")}, {field: 'email', title: '邮箱', width: 200, hide: getColumnHide("email")}, {field: 'city', title: '城市', width: 150, hide: getColumnHide("city")} ]], data: [/* 数据源 */] }); }); ``` #### 2. 列状态管理核心函数 ```javascript // 获取列显示状态(从本地存储读取) function getColumnHide(field) { const savedState = localStorage.getItem('columnState'); return savedState ? JSON.parse(savedState)[field] : false; } // 保存列显示状态到本地存储 function saveColumnState(field, isHidden) { let state = JSON.parse(localStorage.getItem('columnState') || '{}'); state[field] = isHidden; localStorage.setItem('columnState', JSON.stringify(state)); } ``` #### 3. 添加列筛界面 ```html <!-- 列筛按钮 --> <button class="layui-btn" id="columnFilter">列筛</button> <!--菜单(默认隐藏) --> <div class="layui-card" id="filterMenu" style="display:none;position:absolute;z-index:999"> <div class="layui-card-header">显示列</div> <div class="layui-card-body"> <input type="checkbox" name="name" lay-skin="primary" title="姓名" checked> <input type="checkbox" name="email" lay-skin="primary" title="邮箱" checked> <input type="checkbox" name="city" lay-skin="primary" title="城市" checked> </div> </div> ``` #### 4. 实现筛交互逻辑 ```javascript $('#columnFilter').click(function(e){ const $menu = $('#filterMenu'); // 定位菜单位置 $menu.css({ top: e.pageY + 10 + 'px', left: e.pageX + 'px' }).toggle(); // 初始化复框状态 $menu.find('input[type="checkbox"]').each(function(){ const field = $(this).attr('name'); $(this).prop('checked', !getColumnHide(field)); }); }); // 监听筛变化 $('#filterMenu').on('click', 'input[type="checkbox"]', function(){ const field = $(this).attr('name'); const isHidden = !$(this).prop('checked'); // 保存状态 saveColumnState(field, isHidden); // 重载表格应用新列状态 layui.table.reload('dataTable'); }); ``` #### 5. 关键特性说明 1. **本地存储**:使用`localStorage`保存用户列设置,确保刷新页面不重置[^1] 2. **动态渲染**:通过`table.reload()`实现列状态更新[^2] 3. **状态初始化**:`getColumnHide()`函数在表格初始化时应用保存的列状态[^3] 4. **UI交互**:采用卡片式弹出菜单提供友好的筛体验[^4] #### 6. 完整示例 ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Layui列筛</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layui@2.6.8/dist/css/layui.css"> </head> <body> <div class="layui-container"> <button class="layui-btn" id="columnFilter">列筛</button> <table id="dataTable" lay-filter="test"></table> </div> <script src="https://cdn.jsdelivr.net/npm/layui@2.6.8/dist/layui.js"></script> <script> // 状态管理函数(同上步骤2) // ... layui.use(['table', 'jquery'], function(){ var table = layui.table; var $ = layui.$; // 渲染表格(同上步骤1) // ... // 筛交互(同上步骤4) // ... }); </script> </body> </html> ``` ### 注意事项 1. **本地存储限制**:`localStorage`有5MB大小限制,适合保存少量配置数据 2. **多表格场景**:若页面有多个表格,需为每个表格设置独立存储键名 3. **浏览器兼容**:兼容支持`localStorage`的现代浏览器(IE8+) 4. **列标识**:确保每个列的`field`值唯一,作为存储键名[^5] 通过此实现,用户对列的显示/隐藏操作将被持久化保存,刷新页面后仍保持筛状态,符合企业级应用需求[^1][^3]。 --- ### 相关问题 1. **如何实现Layui表格的多条件组合筛?** 可通过`table.reload()`的`where`参数传递多个筛条件[^2],结合后端接口实现复杂查询。 2. **如何清除Layui的列筛状态?** 调用`localStorage.removeItem('columnState')`清除存储,然后重载表格: ```javascript function resetColumns() { localStorage.removeItem('columnState'); layui.table.reload('dataTable'); } ``` 3. **Layui表格如何实现服务端筛?** 在`table.reload()`时传递筛参数,后端根据参数返回对应数据: ```javascript table.reload('dataTable', { where: { name: $('#nameFilter').val(), city: $('#cityFilter').val() } }); ``` 4. **如何优化大量列筛的性能?** 建议: - 采用分步加载(先加载核心列) - 使用`debounce`技术减少频繁重载 - 服务端返回最小数据集 5. **Layui表格筛状态如何同步到多个页面?** 若需跨页面同步,需改用服务器存储或共享存储方案(如`IndexedDB`),通过全局事件通知状态变更。 [^1]: Layui表格筛列状态本地存储方案,防止页面刷新重置 [^2]: 通过table.reload()实现动态筛条件传递 [^3]: 利用hide属性和本地存储实现列显隐状态持久化 [^4]: 卡片式筛菜单提供更友好的用户交互体验 [^5]: 基于唯一字段标识实现多列状态管理
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值