bootstrap table 多选框分页保留

在使用bootstrap table的复选框功能的时候,由于采用服务端分页,当在第一页选择了某些数据,然后点击第二页选择一些数据,再次点回第一页,发现原先选择的数据已经清空了,原来的多选框并不支持翻页保留多选数据。

解决思路:在分页的时候,吧原先选择的数据用一个全局变量保存,当再次翻页回来时,判断当前页数据是否存在于保存的数据数组中,存在则状态为选择。当然当取消选择的时候也要去删除数组中相应的数据。

为了解决这个问题,在查github上查文档发现有人提出了这个问题,并且作者wenzhixin 也编写了相应的例子来演示,想看原问题的点击打开链接

想直接看示例的点击打开链接

原示例是使用html方式来实现的表格,并使用服务端分页。并且相关js方法并不完善,我也踩了很多坑,所以本博客在原作者编写的示例的基础上,做了相关更改,在此展示和说明:




 
 
  1. var $table;
  2. var selectionIds = []; //保存选中ids
  3. $( function () {
  4. $table = $( "#example1").bootstrapTable({
  5. contentType: "application/x-www-form-urlencoded; charset=UTF-8", //初始化编码
  6. url: '<%=basePath%>/order/queryOrderList',
  7. method: 'post',
  8. striped: true, //奇偶行渐色表
  9. pagination: true, //显示分页
  10. clickToSelect: true, //是否选中
  11. maintainSelected: true,
  12. sidePagination: "server", //服务端分页
  13. idField: "id",
  14. pageSize: 10,
  15. responseHandler:responseHandler, //在渲染页面数据之前执行的方法,此配置很重要!!!!!!!
  16. columns: [
  17. { field: 'checkStatus', checkbox: true}, //给多选框赋一个field值为“checkStatus”用于更改选择状态!!!!!
  18. { field: 'id', visible: false},
  19. { field: 'orderNumber', title: "订单编号", align: 'center', width: '10%'}
  20. ]
  21. });
  22. //选中事件操作数组
  23. var union = function(array,ids){
  24. $.each(ids, function (i, id) {
  25. if($.inArray(id,array)== -1){
  26. array[array.length] = id;
  27. }
  28. });
  29. return array;
  30. };
  31. //取消选中事件操作数组
  32. var difference = function(array,ids){
  33. $.each(ids, function (i, id) {
  34. var index = $.inArray(id,array);
  35. if(index!= -1){
  36. array.splice(index, 1);
  37. }
  38. });
  39. return array;
  40. };
  41. var _ = { "union":union, "difference":difference};
  42. //绑定选中事件、取消事件、全部选中、全部取消
  43. $table.on( 'check.bs.table check-all.bs.table uncheck.bs.table uncheck-all.bs.table', function (e, rows) {
  44. var ids = $.map(!$.isArray(rows) ? [rows] : rows, function (row) {
  45. return row.id;
  46. });
  47. func = $.inArray(e.type, [ 'check', 'check-all']) > -1 ? 'union' : 'difference';
  48. selectionIds = _[func](selectionIds, ids);
  49. });
  50. });
  51. //表格分页之前处理多选框数据
  52. function responseHandler(res) {
  53. $.each(res.rows, function (i, row) {
  54. row.checkStatus = $.inArray(row.id, selectionIds) != -1; //判断当前行的数据id是否存在与选中的数组,存在则将多选框状态变为true
  55. });
  56. return res;
  57. }
原示例中并没有给出union和difference方法,是我自己按着思路实现的。开始并没有实现此功能,后来发现要给checkbox字段加上一个filed字段,并与responseHandler方法中更改的row字段一致,才能实现功能。


转载地址:https://blog.csdn.net/github_36086968/article/details/60773900
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值