返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Layui表格行内动态编辑数据
  • 806
分享到

Layui表格行内动态编辑数据

2024-04-02 19:04:59 806人浏览 薄情痞子
摘要

目录前言样式功能说明初始化代码添加监听事件监听头工具栏监听表格行工具栏监听单元格结尾前言 今天向大家分享一些关于经典前端框架 layui 中的动态表格数据操作,结合 Jquery 动

前言

今天向大家分享一些关于经典前端框架 layui 中的动态表格数据操作,结合 Jquery 动态编辑单元格中的数据,希望能帮助到有需要的人,加油,共勉!

样式功能说明

初始化代码

根据 Layui 开发文档,我们能很容易写出如下代码,加载内置组件,动态表格数据填充:


layui.use(function () {
    let layer = layui.layer,
        element = layui.element,
        table = layui.table,
        fORM = layui.form;
    // 指定编辑字段
    const field = ['typeName'];
    // 表格加载数据
    table.render({
        elem: "#newsTypeTable",
        height: 522,
        url: serverBase + "newsType/all",
        parseData: function (res) {
            return {
                "code": res.code,
                "data": res.data.types,
                "count": res.data.count
            };
        },
        // 开启分页
        page: true,
        request: {
            pageName: 'offset',
            limitName: 'pageSize'
        },
        toolbar: `
            <div>
                {{# if(checkPermission(1, null)){ }}
                    <button class="layui-btn layui-btn-sm layui-btn-primary" lay-event="add">
                        <i class="layui-icon layui-icon-addition"></i>
                    </button>
                {{# } }}
                {{# if(checkPermission(3, null)){ }}
                    <button class="layui-btn layui-btn-sm layui-btn-primary" lay-event="batchDel">
                        <i class="layui-icon layui-icon-subtraction"></i>
                    </button>
                {{# } }}
            </div>
        `,
        defaultToolbar: [],
        cols: [
                [
                    {type: 'checkbox', fixed: 'left'},
                    {field: 'id', title: 'ID', sort: true, align: 'center'},
                    {field: 'typeName', title: '新闻类别', align: 'center'},
                    {title: '操作', fixed: 'right', width: 200, align: 'center', toolbar: '#myBar'}
                ]
        ],
        text: {
            none: '显示个寂寞哦~'
        }
    });
});

说明

首先通过请求后台数据,将请求到的数据通过数据解析赋值,注意:如果开启了分页,需要后端传递显示的总条数,当打开页面默认发送的分页请求是 ...?page=1&limit=10 ,通过 request 属性改变传递的参数名,例如我的分页请求就被改为 ...all?offset=1&pageSize=10 。

开启了 toolbar 之后,右边默认的头工具栏就会开启,不需要则需要将 defaultToolbar 属性值置空,而且当你自定义 toobar 时,html 标签元素需放到 div 标签之中方能生效,这个一个规定。

toobar 中使用 Layui 模版语法对当前管理员权限进行验证,如果没有该权限则不予以显示。

通过 {type: 'checkbox', fixed: 'left'} 开启复选框,并将其固定到表格中的最左侧。

操作栏中,通过 id 引入外部自定义 toolbar


<script type="text/html" id="myBar">
    <button class="layui-btn layui-btn-sm layui-btn-primary" lay-event="edit">
        <i class="layui-icon layui-icon-edit"></i>
    </button>
    <button class="layui-btn layui-btn-sm layui-btn-primary" lay-event="del">
        <i class="layui-icon layui-icon-delete"></i>
    </button>
</script>

添加监听事件

监听头工具栏


table.on('toolbar(newsTypeList)', function(obj) {
    let checkStatus = table.checkStatus(obj.config.id);
    // 选中行数据
    let selectedData = checkStatus.data;
    if(obj.event === 'add') {
        // 跳转到新闻类型添加页面
        window.open('addNewsType.html', 'mainFrame');
    }else if(obj.event === 'batchDel') {
        if(selectedData.length > 0) {
            let ids = [];
            selectedData.forEach((targetRow) => {
                ids.push(targetRow.id)
            });
            layer.confirm(`确认删除 ID[${ids}] 吗?`, {title: '警告', icon: 0},
                function (index) {
                    $.ajax({
                        type: "DELETE",
                        contentType: "application/JSON;charset=UTF-8",
                        url: serverBase + "newsType/del",
                        data: jsON.stringify(ids),
                        dataType: 'json',
                        success: function (res) {
                            if (handleResponseData(res, layer)) {
                                // 成功删除后,重新加载页面
                                setTimeout(function () {
                                    location.href = 'newsTypeList.html';
                                }, delayTime);
                            }
                        }
                    });
                    layer.close(index);
                }
            );
        }else {
            layer.msg('请至少选择一行', {icon: 3});
        }
    }
});

公用 js 文件中定义了 serverBase(请求后端基址)、delayTime(消息弹层延迟时间)以及封装了对返回数据进行处理的函数 handleResponseData 。

到此,头工具栏的两个功能就实现了,还是比较简单的,对吧?

监听表格行工具栏


table.on('tool(newsTypeList)', function (obj) {
    // 获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
    var layEvent = obj.event;
    // 获取该行数据对象
    var data = obj.data;
    switch (layEvent) {
        case 'edit':
            const row = obj.tr;
            const field_td = row.find(`[data-field$=${field[0]}]`);
            field_td.data('edit', true);
            row[0].onclick = function() {
                setTimeout(function () {
                    field_td[0].lastChild.onblur = function () {
                        row.find('[data-field$=typeName]').data('edit', false);
                    }
                }, 10);
            };
            break;
        case 'del':
            let ids = [];
            ids.push(data.id);
            layer.confirm(`真的删除 ID => ${ids[0]} 所在行吗?`, function(index) {
                //向服务端发送删除指令
                $.ajax({
                    type: "DELETE",
                    contentType: "application/json;charset=UTF-8",
                    url: serverBase + "newsType/del",
                    data: JSON.stringify(ids),
                    dataType: 'json',
                    success: function (res) {
                        if (handleResponseData(res, layer)) {
                            setTimeout(function () {
                                // 删除对应行(tr)的DOM结构,并更新缓存
                                obj.del();
                            }, delayTime);
                        }
                    }
                });
                layer.close(index);
            });
            break;
    }
});

行删除很简单,就是通过点击所在行拿到删除对象的 id ,向后端传递即可完成对应行的数据删除。

行内实现点击编辑按钮进行编辑可谓有点难度了,首先你点击按钮后,要开启约定字段的编辑,即点击后就会出现一个输入框,你可以对其进行修改更新操作,当输入框失去焦点时,又要将刚刚的编辑入口关闭,也就是再一次点击时不会二次出现输入框。


// 开启指定字段的编辑,关闭同理,参数传入 false 即可
obj.tr.find(`[data-field$=${field[0]}]`).data('edit', true);

其中,field 规定编辑字段名,和 cols 属性中 field 属性值一致。


// 指定编辑字段
const field = ['typeName'];

通过 JQuery 中 find 函数找到单元格对应的标签,再通过 data 函数增添 edit 属性,并将其初始化为 true 值,相当于:{field: 'typeName', title: '新闻类别', align: 'center', edit: true}

由于输入框是在点击对应的单元格后出现的,所以给单元格注册一个点击事件,点击事件后不能立马获取到 input 输入框,需要 DOM 结构更新存在延迟,需要给点延迟获取的时间。

通过浏览器调试发现,该单元格 td 父元素中最后一个子元素就是 input ,添加失焦事件,当触发时,关闭编辑入口,需重新按下按钮开启。


row[0].onclick = function() {
    setTimeout(function () {
        field_td[0].lastChild.onblur = function () {
            row.find('[data-field$=typeName]').data('edit', false);
        }
    }, 10);
};

监听单元格


table.on('edit(newsTypeList)', function(obj) {
    let value = obj.value // 得到修改后的值
        , data = obj.data // 得到所在行所有键值
        , field = obj.field; //得到修改的字段
    let modifiedData = {id: data.id};
    modifiedData[field] = value;
    $.ajax({
        type: "POST",
        contentType: "application/json;charset=UTF-8",
        url: serverBase + 'newsType/update',
        data: JSON.stringify(modifiedData),
        dataType: 'json',
        success: function(res) {
            if(!handleResponseData(res, layer)) {
                setTimeout(function () {
                    location.href = 'newsTypeList.html';
                }, delayTime);
            }
        }
    });
});

最后,将修改后的对象传入并发送更新请求,对于修改的值可于后台进行校验,修改失败则刷新当前页面。

结尾

到此这篇关于Layui表格行内动态编辑数据的文章就介绍到这了,更多相关Layui表格动态编辑内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网! 

--结束END--

本文标题: Layui表格行内动态编辑数据

本文链接: https://lsjlt.com/news/134165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Layui表格行内动态编辑数据
    目录前言样式功能说明初始化代码添加监听事件监听头工具栏监听表格行工具栏监听单元格结尾前言 今天向大家分享一些关于经典前端框架 layui 中的动态表格数据操作,结合 JQuery 动...
    99+
    2024-04-02
  • react+antd实现动态编辑表格数据
    本文实例为大家分享了react+antd动态编辑表格数据的具体代码,供大家参考,具体内容如下 在项目中,我们会遇到一种需求,为用户提供一份表格去编辑,而且表格中各个单元格是相关影响的...
    99+
    2024-04-02
  • Layui数据表格之单元格编辑方式的示例分析
    这篇文章将为大家详细讲解有关Layui数据表格之单元格编辑方式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。开发工具与关键技术:VS、layui数据表格之单元格...
    99+
    2024-04-02
  • jquery表格动态删除一行数据
    在开发 Web 应用程序时,数据表格是一个常见的组件,通常用于展示数据。然而,有时候我们需要从表格中删除某一行数据,使用 jQuery 来实现这个功能是非常方便的。在 jQuery 中,我们通常使用 remove() 方法来删除 DOM 元...
    99+
    2023-05-23
  • layui数据表格跨行自动合并的示例分析
    这篇文章将为大家详细讲解有关layui数据表格跨行自动合并的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求描述:在数据表格中,对于按某个分类展示数据其分类下又...
    99+
    2024-04-02
  • 动态可编辑表单项
    遇到的问题:业务需要用户输入对应的username以发送私信给指定对象 方案1-input 输入就完事了 缺陷:要输入,麻烦 发给: 方案2-select thymeleaf模板动态获取后端u...
    99+
    2023-09-03
    html thymeleaf
  • Element Table行的动态合并及数据编辑示例
    目录正文思路1:第二列和第三列第四列根据名称进行合并2:可以动态编辑第三列和第四列解决3:第一列的数据是根据第三列相加得来的4:弹出个输入框完整代码正文 先描述一下需求,看下图 1...
    99+
    2024-04-02
  • Vue中table如何实现动态表格td可编辑
    这篇文章主要介绍Vue中table如何实现动态表格td可编辑,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!项目中需求用到可编辑表格下图这种 ↓element UI 组件table表格...
    99+
    2024-04-02
  • layui如何获取表格数据
    在layui中获取表格数据有多种方式,常用的方法有以下几种:1. 使用表格对象的getData()方法获取当前表格的所有数据:```...
    99+
    2023-09-22
    layui
  • layui表格返回的数据状态异常怎么办
    小编给大家分享一下layui表格返回的数据状态异常怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!最近用到了layui表格组件,结果发现数据返回状态异常 在网上查询了下是因为需要转成固...
    99+
    2024-04-02
  • java sql编辑器 动态报表 数据库备份还原quartz
    获取【下载地址】   QQ: 313596790   【免费支持更新】三大数据库 mysql  oracle  sqlseve...
    99+
    2024-04-02
  • layui如何实现表格操作列按钮动态显示
    这篇文章主要为大家展示了“layui如何实现表格操作列按钮动态显示”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“layui如何实现表格操作列按钮动态显示”这篇文...
    99+
    2024-04-02
  • 如何渲染layui框架table数据表格
    这篇文章主要为大家展示了“如何渲染layui框架table数据表格”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何渲染layui框架table数据表格”这篇文...
    99+
    2024-04-02
  • layui如何自定义表格的列数据
    在Layui中,可以通过自定义渲染函数来自定义表格的列数据。首先,你需要在列定义中使用自定义渲染函数,例如:```javascrip...
    99+
    2023-09-22
    layui
  • 利用MySQL Workbench管理表(数据表的创建以及表内数据编辑)
    1. 数据表的创建。 (1)打开MySQL Workbench工具。   (2)在mysqltest数据库中创建一个数据表student02. ①输入数据库表名student02,选择默认数据库引擎InnoDB,分别输入列名,选...
    99+
    2016-08-27
    利用MySQL Workbench管理表(数据表的创建以及表内数据编辑)
  • layui中布局和表格的渲染以及动态生成表格的示例分析
    这篇文章主要介绍了layui中布局和表格的渲染以及动态生成表格的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。整体的效果:一、首先百...
    99+
    2024-04-02
  • Vue怎么动态扩展表头的表格及数据
    这篇文章主要介绍“Vue怎么动态扩展表头的表格及数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue怎么动态扩展表头的表格及数据”文章能帮助大家解决问题。实现效果需求描述接收后端传的json数据...
    99+
    2023-07-05
  • 如何转换layUI的数据表格中的日期格式
    这篇文章主要介绍如何转换layUI的数据表格中的日期格式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!转换layUI的数据表格中的日期格式前端jsp代码 <table...
    99+
    2024-04-02
  • layui怎么对列表数据进行筛选
    在Layui中,可以使用table模块的filter()方法对列表数据进行筛选。具体步骤如下:1. 在HTML中定义一个表格,并为每...
    99+
    2023-09-22
    layui
  • Vue动态获取数据后控件不可编辑问题
    目录功能介绍实现过程1.做判断2.在控件中使用editNotavailable3.定义editNotavailable的初始状态老规矩:先走波流程! 看实现效果,更好根据大家的问题相...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作