layui table点击按钮添加、删除一行

本文介绍如何使用layuitable实现动态添加和删除表格行的功能,包括添加和删除按钮的事件绑定,以及添加后的元素渲染。

layui table点击按钮添加、删除一行

好久没发东西了,今天说一下最近学到的东西吧。

首先这一篇是layui table点击按钮动态添加、删除一行的实现。

当然别的也可以,比如添加div之类的,只是这里以layui table来举例。

layui table有多种渲染方式,由于方法渲染table的动态添加没有很好的实现,所以这里只说静态表格自动渲染


table

<table class="layui-table" id="table" lay-filter="table">
	<thead>
		<tr>
			<td>姓名</td>
			<td>性别</td>
			<td>操作</td>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td><input type="text" class="layui-input" name="uName"></td>
			<td>
				<select>
					<option value=""></option>
					<option value="0"></option>
					<option value="1"></option>
				</select>
			</td>
			<td>
				<a class="layui-btn layui-btn-xs add">添加</a>
				<a class="layui-btn layui-btn-danger layui-btn-xs del">删除</a>
			</td>
		</tr>
	</tbody>
</table>

添加一行

//因为动态添加的元素class属性是无效的,所以不能用$('.add').click(function(){});
$('body').on('click', '.add', function() {
    //你要添加的html
    var html = '<tr>'+
			'<td><input type="text" class="layui-input" name="uName"></td>'+
			'<td>'+
				'<select>'+
					'<option value=""></option>'+
					'<option value="0">女</option>'+
					'<option value="1">男</option>'+
				'</select>'+
			'</td>'+
			'<td>'+
				'<a class="layui-btn layui-btn-xs add">添加</a>'+
				'<a class="layui-btn layui-btn-danger layui-btn-xs del">删除</a>'+
			'</td>'+
		'</tr>';
    //添加到表格最后
    $(html).appendTo($('#table tbody:last'));
    form.render();//因为有select元素,所有添加后要重新渲染一次
});

删除一行

$('body').on('click', '.del', function() {
	if ($('#table tbody tr').length === 1) {
		layer.msg('只有一条不允许删除。', {
			time : 2000
		});
	} else {
        //删除当前按钮所在的tr
		$(this).closest('tr').remove();
	}
});

以上就是动态添加一行、删除一行的实现过程。

需要注意的是:

  1. layui form元素需要重新渲染才显示
  2. 如果为添加、删除按钮绑定点击事件是使用$('.class').click(function() {});这种方式的话,动态添加的元素是无效的,需要使用$('body').on('click', '.class', function() {})的方式绑定事件
<think>我们正在讨论Layui框架中如何在表格中添加按钮并监听其点击事件。根据引用内容,有两种常见场景:在表格行内添加操作按钮和在表头添加按钮。 根据引用[1]:在表格行内添加按钮是通过在表格列配置中设置`templet`自定义模板,然后在工具栏事件中通过`lay-event`属性来区分不同按钮。 根据引用[2]:在表头添加按钮是通过在表头列配置中设置`toolbar`属性,并在其中编写HTML按钮,然后通过`form.on()`监听按钮点击事件。 因此,我们需要分别说明这两种情况。 注意:由于用户要求查找在layui table添加按钮并进行监听的方法,我们将分步骤说明。 具体实现步骤如下: 情况一:在行内添加操作按钮(每行的操作列) 1. 在表格列配置中,定义一个操作列,使用`templet`自定义模板,模板中放置带有`lay-event`属性的按钮。 2. 使用`table.on('tool(tableFilter)', callback)`监听行内按钮事件。 情况二:在表头添加按钮 1. 在表头列配置中,使用`toolbar`属性,值为一个HTML字符串,里面放置按钮。 2. 使用`form.on('submit(filter)', callback)`来监听按钮点击事件(需要确保按钮有`lay-submit`属性以及对应的`lay-filter`属性)。 下面分别给出示例代码。 情况一:行内操作按钮 示例表格配置: ```javascript table.render({ elem: '#demo', cols: [[ // ... 其他列 {field: 'id', title: '操作', toolbar: '#barDemo'} // 使用模板ID ]], // ... 其他配置 }); ``` 模板脚本(通常在HTML中定义,类型为text/html): ```html <script type="text/html" id="barDemo"> <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> ``` 监听事件: ```javascript table.on('tool(demo)', function(obj){ // 注意:这里的'demo'是table的属性filter值,即table的属性filter="demo" var data = obj.data; // 当前行数据 var event = obj.event; // 获取按钮的lay-event属性值 if(event === 'edit'){ // 编辑操作 } else if(event === 'del'){ // 删除操作 } }); ``` 情况二:表头工具栏按钮 示例表头列配置: ```javascript table.render({ elem: '#demo', cols: [[ {field: 'title', title: '文章标题', sort: true}, {field: 'status', title: GSUpdateIniBar, width:150, align:'center'} // 这里GSUpdateIniBar是之前定义的HTML字符串变量 ]], // ... 其他配置 }); ``` 注意:在表头列中,我们用了一个包含多个按钮的HTML字符串(如引用[2]中的GSUpdateIniBar变量)。 然后,我们需要监听这些按钮点击事件。由于这些按钮是动态生成的,我们需要使用`form.on()`来监听,并且按钮需要设置`lay-filter`和`lay-submit`属性(或者也可以使用`lay-event`,但这里引用[2]使用的是`lay-submit`和`lay-filter`)。 示例监听代码(使用form模块): ```javascript form.on('submit(GSUpdateIniOff)', function(data){ // 获取表格数据 var tableData = table.cache['GSToolManagementTable']; // 这里使用表格容器的id对应的缓存 // 执行关闭操作 }); form.on('submit(GSUpdateIniOn)', function(data){ var tableData = table.cache['GSToolManagementTable']; // 执行开启操作 }); ``` 注意:需要确保在渲染表格之后监听事件,并且监听的代码放在`layui.use`的回调函数中。 总结: - 行内按钮:使用`toolbar`列模板,监听`table.on('tool')`。 - 表头按钮:在列标题中直接写HTML,监听`form.on('submit')`(需要按钮有`lay-submit`和对应的`lay-filter`)。 请根据实际需求选择合适的方式。 相关问题: 1. 如何在Layui表格中同时添加行内按钮和表头按钮? 2. 如何获取Layui表格中当前行的数据? 3. Layui表格中按钮的事件监听有哪些注意事项? </think>在 Layui 表格中添加按钮并监听点击事件主要有两种实现方式:**行内操作按钮**和**表头工具栏按钮**。下面是具体实现方法: --- ### 方法一:行内操作按钮(每行添加按钮) #### 步骤: 1. **定义列模板** 在表格列配置中,使用 `toolbar` 属性指定自定义按钮模板: ```javascript table.render({ elem: '#tableId', cols: [[ {field: 'id', title: 'ID'}, // 操作列:通过 toolbar 添加按钮 {title: '操作', toolbar: '#toolbarTpl'} // 模板ID ]], data: [...] // 数据源 }); ``` 2. **编写按钮模板**(HTML中定义) 使用 `<script type="text/html">` 定义按钮及 `lay-event` 标识: ```html <script type="text/html" id="toolbarTpl"> <button class="layui-btn layui-btn-sm" lay-event="edit">编辑</button> <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="delete">删除</button> </script> ``` 3. **监听按钮事件** 通过 `table.on('tool(tableFilter)')` 捕获点击: ```javascript // 监听行内按钮事件 table.on('tool(tableFilter)', function(obj) { const data = obj.data; // 获取当前行数据 const event = obj.event; // 获取按钮的 lay-event 值 if (event === 'edit') { layer.msg(`编辑ID: ${data.id}`); } else if (event === 'delete') { layer.confirm('确认删除?', () => { // 执行删除逻辑 }); } }); ``` --- ### 方法二:表头工具栏按钮 #### 步骤: 1. **在表头列中插入按钮** 直接在列标题(`title`)中嵌入 HTML 按钮: ```javascript table.render({ elem: '#tableId', cols: [[ { title: '<button class="layui-btn" lay-filter="refreshBtn">刷新数据</button>', align: 'center' }, // 其他列... ]] }); ``` 2. **通过 Form 模块监听点击** 使用 `form.on('submit(filter)')` 监听按钮事件: ```javascript // 监听表头按钮事件 form.on('submit(refreshBtn)', function() { table.reload('tableId', { /* 重载表格参数 */ }); return false; // 阻止默认提交 }); ``` --- ### 关键区别 | 场景 | 适用位置 | 监听方式 | 获取数据方式 | |--------------|---------------|----------------------------|--------------------| | 行内操作按钮 | 每行末尾 | `table.on('tool')` | `obj.data` | | 表头工具栏 | 表头区域 | `form.on('submit')` | 需通过表格缓存获取 | > **注意事项** > - 行内按钮需绑定 `lay-event` 属性区分操作类型 > - 表头按钮需绑定 `lay-filter` 或 `lay-submit` > - 动态生成的按钮需在 `layui.use` 回调函数内初始化事件监听[^1][^2] --- ### 完整示例代码 ```html <!-- 行内按钮模板 --> <script type="text/html" id="toolbarTpl"> <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> layui.use(['table', 'form'], function() { const table = layui.table; const form = layui.form; // 渲染表格 table.render({ elem: '#demo', cols: [[ {field: 'id', title: 'ID'}, {title: '操作', toolbar: '#toolbarTpl'} // 行内按钮 ]] }); // 监听行内按钮 table.on('tool(demo)', function(obj) { if (obj.event === 'edit') { console.log("编辑数据:", obj.data); } }); // 监听表头按钮 form.on('submit(refreshBtn)', function() { table.reload('demo'); }); }); </script> ```
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值