layui table 复选框跳页后再回来保持原来选中的状态示例


Posted in Javascript onOctober 26, 2019

layui table默认跳页后不存在源页面选中的状态。如果要实现记录源页面的选中状态,需要定义一个全局变量来记录数据选中状态。

1、修改table.js

;layui.define(["laytpl", "laypage", "layer", "form"], function (e) {
 "use strict";
 var t = layui.$, i = layui.laytpl, a = layui.laypage, l = layui.layer, n = layui.form, o = layui.hint(),
  r = layui.device(), d = {
   //layuiPageCheckedIds变量记录选中的数据id,格式是“,1,2,3,4,”的字符串
   config: {checkName: "LAY_CHECKED", indexName: "LAY_TABLE_INDEX", layuiPageCheckedIds: ","},
   cache: {},
   index: layui.table ? layui.table.index + 1e4 : 0,
   set: function (e) {
    var i = this;
    return i.config = t.extend({}, i.config, e), i
   },
   on: function (e, t) {
    return layui.onevent.call(this, s, e, t)
   }
  }
  
  ...
  
  S.prototype.pullData = function (e, i) {
  var a = this, n = a.config, o = n.request, r = n.response, d = function () {
   "object" == typeof n.initSort && a.sort(n.initSort.field, n.initSort.type)
  };
  if (a.startTime = (new Date).getTime(), n.url) {
   var c = {};
   //在发送请求前将选中的数据放入条件中
   if(n.layuiPageCheckedIds != undefined && "" != n.layuiPageCheckedIds){
    n.where.layuiCheckedIds = n.layuiPageCheckedIds;
   }
   if(tableRender){
    var currPageNumber = getPageNumber();
    c[o.pageName] = currPageNumber;
    tableRender = false;
   }else{
    setPageNumberCookie(e);
    c[o.pageName] = e;
   }
   c[o.limitName] = n.limit;
   t.ajax({
    type: n.method || "get",
    url: n.url,
    data: t.extend(c, n.where),
    dataType: "json",
    success: function (t) {
     if(null != startLoading){
      layer.close(startLoading);
      startLoading = null;
     }
     return t[r.statusName] != r.statusCode ? (a.renderForm(), a.layMain.html('<div class="' + f + '">' + (t[r.msgName] || "返回的数据状态异常") + "</div>")) : (a.renderData(t, e, t[r.countName]), d(), n.time = (new Date).getTime() - a.startTime + " ms", i && l.close(i), void("function" == typeof n.done && n.done(t, e, t[r.countName])))
    },
    error: function (e, t) {
     a.layMain.html('<div class="' + f + '">数据接口请求异常</div>'), a.renderForm(), i && l.close(i)
    }
   });
  } else if (n.data && n.data.constructor === Array) {
   if(null != startLoading){
    layer.close(startLoading);
    startLoading = null;
   }
   var s = {}, u = e * n.limit - n.limit;
   s[r.dataName] = n.data.concat().splice(u, n.limit), s[r.countName] = n.data.length, a.renderData(s, e, n.data.length), d(), "function" == typeof n.done && n.done(s, e, s[r.countName])
  }
 }
 ...
 //在文件的最后添加设置选中变量的方法
 //设置初始选中值
 ,d.initPageCheckedIds=function(e,i){
  if(i == undefined || i == ""){
   i = "";
  }
  if(i.length > 0 && "," != i.substring(0,1)){
   i = "," + i;
  }
  if(i.length > 0 && "," != i.substring(i.length - 1, i.length)){
   i = i + ",";
  }
  c.config[e].layuiPageCheckedIds = i;
 },
 //获取选中的ids, 参数e表示table的id
 d.getLayuiPageCheckedIds=function (e) {
   return c.config[e].layuiPageCheckedIds;
 },
 //设置选中的ids,e表示table的id,obj表示选中的行数据,v表示记录哪一个参数
 d.setLayuiPageCheckedIds=function (e,obj,v) {
  var a = c.config[e];
  var layuiPageCheckedIds = a.layuiPageCheckedIds;
  //全选按钮
  if(obj.type == "all"){
   //全选
   if (obj.checked) {
    var checkStatus = d.checkStatus(e);
    var datas = checkStatus.data;
    for(var i = 0; i < datas.length; i++) {
     layuiPageCheckedIds = d.setPageSelected(layuiPageCheckedIds, datas[i][v]);
    }
   } 
 //取消全选
 else {
    var cache = d.cache;
    var datas = cache[e];
    for(var i = 0; i < datas.length; i++) {
     layuiPageCheckedIds = d.cancelPageSelected(layuiPageCheckedIds, datas[i][v]);
    }
   }
  }
 //单行选中
 else {
 //选中
   if (obj.checked) {
    layuiPageCheckedIds = d.setPageSelected(layuiPageCheckedIds, obj.data[v]);
   }
 //取消选中
 else {
    layuiPageCheckedIds = d.cancelPageSelected(layuiPageCheckedIds, obj.data[v]);
   }
  }
  a.layuiPageCheckedIds = layuiPageCheckedIds;
 },
 //添加选中项
 d.setPageSelected=function(layuiPageCheckedIds, seleted){
  if(layuiPageCheckedIds == undefined || layuiPageCheckedIds == ""){
    return "," + seleted + ",";
   }else{
    return layuiPageCheckedIds + seleted + ",";
   }
 },
 //取消选中项
 d.cancelPageSelected=function (layuiPageCheckedIds, seleted) {
  var match = "," + seleted + ",";
  var pos = layuiPageCheckedIds.indexOf(match);
  if (pos >= 0) {
   return layuiPageCheckedIds.substring(0, pos) + layuiPageCheckedIds.substring(pos + match.length - 1);
  }
 }
});

2、后台根据id设置数据选中状态

@RequestMapping(value = "/search", method = RequestMethod.GET)
 @ResponseBody
 public Map<String, Object> search(Pageable pageable, @RequestParam List<Long> layuiCheckedIds) {
  Map<String, Object> rst = new HashMap<>(4);
  rst.put("code", 0);
  rst.put("msg", "");

  Page<Person> page = personService.findPage(pageable);
  
  rst.put("count", page.getTotalSize());
  List<Map<String, Object>> datas = new ArrayList<>(8);
  
  for (Person person : page.getContent()) {
   Map<String, Object> view = new HashMap<>(4);
   view.put("id", person.getId());
   view.put("name", person.getName());
 
 //如果person.getId()已经被选中,则设置选中状态
   if (!CollectionUtils.isEmpty(layuiCheckedIds) && layuiCheckedIds.contains(person.getId())) {
    view.put("LAY_CHECKED", true);
   }
   ...
   datas.add(view);
  }
  rst.put("data", datas);
  return rst;
 }

3、前端用法

layui.use("table", function(){
 var table = layui.table;

 //设置初始选中项
 var checkedIds = "1,2,3,4";
 table.render({
 elem: '#test',
 url:"./person/search",
 where: {"layuiCheckedIds": checkedIds },
 ,cols: [[
 {type:'checkbox', width:'10%'},
 {field:'id', title: 'ID', width:'20%'},
 {field:'name', title: '姓名', width:'15%'}
 ]],
 page: true,
 id:'idTest'
 });
 //初始化选中项
 table.initPageCheckedIds('idTest', checkedIds );
 //监听表格复选框选择
 table.on('checkbox(demo)', function(obj){
  //设置多页面选中效果
  //第一个参数表示table的id值,第二个参数表示复选框选中的数据,第三个参数表示要解析的是哪一个属性值(这里是将数据模型中的id属性进行解析)。
  table.setLayuiPageCheckedIds('idTest',obj, "id");
 
 //获取所有选中的id值(例如:“,1,2,5,7,3,15,22”)
 //alert(table.getLayuiPageCheckedIds('idTest'));
 });
});

以上这篇layui table 复选框跳页后再回来保持原来选中的状态示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
整理Javascript基础语法学习笔记
Nov 29 Javascript
js实现图片淡入淡出切换简易效果
Aug 22 Javascript
jQuery 如何实现一个滑动按钮开关
Dec 01 Javascript
详解Vue 实例中的生命周期钩子
Mar 21 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
JavaScript设计模式之建造者模式实例教程
Jul 02 Javascript
Vue头像处理方案小结
Jul 26 Javascript
详解小程序缓存插件(mrc)
Aug 17 Javascript
React Router V4使用指南(精讲)
Sep 17 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 Javascript
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
Layui 解决表格异步调用后台分页的问题
Oct 26 #Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 #Javascript
vue-router的钩子函数用法实例分析
Oct 26 #Javascript
VUE兄弟组件传值操作实例分析
Oct 26 #Javascript
layui实现给某一列加点击事件
Oct 26 #Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
Oct 26 #Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
Oct 26 #Javascript
You might like
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
PHP 中常量的知识整理
2017/04/14 PHP
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
Python交换变量
2008/09/06 Python
pycharm远程调试openstack代码
2017/11/21 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
python3 拼接字符串的7种方法
2018/09/12 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
如何通过命令行进入python
2020/07/06 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
车工岗位职责
2013/11/26 职场文书
公司2014年度工作总结
2014/12/10 职场文书
平遥古城导游词
2015/02/03 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
Django框架中视图的用法
2022/06/10 Python