layui table 表格 多个操作按钮使用记录

14 篇文章 4 订阅

在开发中有时候 table 表格的操作按钮是不固定的,可以有多个,三两个还好,如果操作的按钮过多的时候就不美观了,这时候我们就想把一下按钮添加到一个按钮列表中,在正常的情况下就隐藏起来,点击的时候弹出这个按钮列表, 如: 我们想要实现这种效果
在这里插入图片描述

当我们点击更多的时候弹出一个按钮列表, 在网上找了好久都没有找到layui有中自带这个功能,所有得自己写了

思路

刚开始的时候我觉得可以点击更多的时候写一个弹窗的方法,在弹窗中展示按钮,但是做的差不多的时候发现,这弹窗不太行,不符合原型图上的设计,于是又找其他的方法,最终找到了 layer.tips方法
layer.tips是提示方法,它可以在点击的地方进行弹窗提示,跟原型图上的差不多了, 于是将普通弹窗改为了 layer.tips

    //监听工具条
    table.on('tool(data_table)', function(obj){
    	//当点击table 表格中的更多按钮的时候触发这个事件
        if(obj.event === 'more'){
			var html = "<input value = 'aaaa'>"
 			layer.tips(html, this,{tips: [1, '#ffffff'],area: ['130px', '150px'], time: 0})
 	} 
 }

layer.tips又有个问题,这是提示弹窗,一般提示的弹窗会有个在 几秒后 自动关闭 或者设置为不关闭,这样不太符合我们的要求,我们想要自己关闭这个弹窗,由于这个弹窗右上角是没有关闭图标的,所以我们想设置成点击其他地方就自动关闭这个弹窗,这时候可以写一个监听鼠标点击事件进行监听

    //监听工具条
    table.on('tool(data_table)', function(obj){
    	//当点击table 表格中的更多按钮的时候触发这个事件
        if(obj.event === 'more'){
			var html = "<input value = 'aaaa'>"
			// 获取弹窗index
 			tips_index = layer.tips(html, this,{tips: [1, '#ffffff'],area: ['130px', '150px'], time: 0})
 	} 
 }
 	//定义tips 弹窗index
 	var tips_index = ""
 	//监听鼠标点击事件
   window.addEventListener('click', function() {
   		//关闭弹窗
        layer.close(tips_index)
    }, false);

当监听到鼠标点击的时候关闭layer.tips弹窗
这时候又有个问题了,这个监听鼠标点击事件在 js 事件等级是最低的,就是说,我点击更多后展示弹窗,展示完弹窗后再执行其他的关联到这个点击事件的其他操作,执行完所有更这个点击事件相关的逻辑才到鼠标监听事件,这就出现了一种情况, 我点完更多,刚弹窗又被鼠标监听给关闭了,这就很麻烦了,问题在鼠标监听上,我可以再弄一个变量用来逻辑判断啊, 上面 tips.index是弹窗的索引, 也就是说它是一个整数,我点击更多的时候它会将这个索引赋值给全局变量 tips_index,这时候我再赋值一个控制关闭弹窗的变量一个小于这个索引值的数,然后改一下监听事件,每次监听点击就给这个控制关闭弹窗的变量+1, 如果相等就不关闭,如果不相等就关闭这个弹窗不就行了吗

    //监听工具条
    table.on('tool(data_table)', function(obj){
    	//当点击table 表格中的更多按钮的时候触发这个事件
        if(obj.event === 'more'){
			var html = "<input value = 'aaaa'>"
			// 获取弹窗index
 			tips_index = layer.tips(html, this,{tips: [1, '#ffffff'],area: ['130px', '150px'], time: 0})
 			close_tips = tips_index-1
 	} 
 }
 	//定义tips 弹窗index
 	var tips_index = ""
 	var close_tips = ""
 	//监听鼠标点击事件
   window.addEventListener('click', function() {
   		//关闭弹窗
   		close_tips += 1
   		if (close_tips != tips_index){
   		        layer.close(tips_index)
   		}
    }, false);

终于完了,看下效果
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
layui table 是一款基于layui框架开发的表格插件,它提供了很多实用的功能,包括批量删除。具体实现方法如下: 1. 在HTML页面中,定义一个表格,并且给表格添加一个id,如下所示: ``` <table id="demo" lay-filter="test"></table> ``` 2. 在JS文件中,通过 layui.table.render() 方法渲染表格,并且设置一些属性,如下所示: ``` layui.use('table', function(){ var table = layui.table; //渲染表格 table.render({ elem: '#demo', url: '/demo/table/user/', //数据接口 page: true, //开启分页 cols: [[ //表头 {type: 'checkbox'}, {field: 'id', title: 'ID', width:80, sort: true}, {field: 'username', title: '用户名', width:120}, {field: 'email', title: '邮箱', width:150}, {field: 'sex', title: '性别', width:80, sort: true}, {field: 'city', title: '城市', width:100}, {field: 'sign', title: '签名', width: 200}, {field: 'experience', title: '积分', width: 80, sort: true}, {field: 'score', title: '评分', width: 80, sort: true}, {field: 'classify', title: '职业', width: 100}, {field: 'wealth', title: '财富', width: 135, sort: true}, {fixed: 'right', title:'操作', toolbar: '#barDemo', width:150} ]] }); }); ``` 3. 定义一个工具条模板,通过 checkbox 来选择需要删除的数据项,如下所示: ``` <script type="text/html" id="barDemo"> <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a> </script> ``` 4. 绑定工具条事件,通过 layui.table.on() 方法监听事件,如下所示: ``` layui.use('table', function(){ var table = layui.table; //监听工具条 table.on('tool(test)', function(obj){ var data = obj.data; //获取当前行数据 var layEvent = obj.event; //获取lay-event对应的值 if(layEvent === 'del'){ //删除 layer.confirm('真的删除行么', function(index){ obj.del(); //删除对应行(tr)的DOM结构,并更新缓存 layer.close(index); //向服务端发送删除指令 }); } }); }); ``` 5. 定义一个批量删除按钮,通过 layui.table.on() 方法监听按钮事件,并获取选中的数据项进行删除操作,如下所示: ``` layui.use('table', function(){ var table = layui.table; //监听表格复选框选择 table.on('checkbox(test)', function(obj){ console.log(obj) }); //监听工具条 table.on('tool(test)', function(obj){ var data = obj.data; //获取当前行数据 var layEvent = obj.event; //获取lay-event对应的值 if(layEvent === 'del'){ //删除 layer.confirm('真的删除行么', function(index){ obj.del(); //删除对应行(tr)的DOM结构,并更新缓存 layer.close(index); //向服务端发送删除指令 }); } }); //批量删除按钮事件监听 $('#btnDelete').click(function(){ var checkStatus = table.checkStatus('demo'); //获取选中行数据 var data = checkStatus.data; if(data.length > 0){ layer.confirm('真的删除选中的数据么?', function(index){ $.ajax({ url : '/demo/table/delete/', type : "POST", data : { data : JSON.stringify(data) }, success : function(data) { if (data.code == 0) { layer.msg("删除成功", { icon : 6, time : 1000 }, function() { table.reload("demo"); }); } else { layer.msg(data.msg, { icon : 5, time : 1000 }); } } }); layer.close(index); }); }else{ layer.msg("请选择需要删除的数据"); } }); }); ``` 以上就是 layui table 批量删除的实现方法。如果您还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值