思路:定义全局的array(selectedIds),当列表选中的时候就push进去,当列表取消选中时,将该项从selectedIds中删除

重点:1.列表加载完成时为列表增加复选框,并给每一个checkbox赋name;

2.回显时模拟checkbox的click事件;

代码如下:

var selectedIds = [];
$(function () {
InitChooseCourseList();
//绑定搜索
$("#SearchCourseForChoose").click(function () {
SearchForChoose();
});
}); //页面列表初始化
function InitChooseCourseList() {
var $gridList = $("#gridList");
var postData = $('#CourseForm').formSerialize();
var classId = $("#ClassId").val();
postData["ClassId"] = classId;
$gridList.Grid({
mtype: 'Post',
postData: postData,
url: "/TopOnline/Class/ChooseCourseGrid",
height: ($(window).height() - 145),
colModel: [
{ label: 'ID', name: 'ID', hidden: true },
{ label: 'CourseSubjectId', name: 'CourseSubjectId', hidden: true },
{ label: '课程名称', name: 'Name', width: fixJqgridColumnWidthByPercent(0.45), align: 'center' },
{ label: '所属科目', name: 'CourseSubjectName', width: fixJqgridColumnWidthByPercent(0.45), align: 'center' }
],
pager: '#gridPager',
viewrecords: true,
multiselect: true,
//为表格增加复选框
gridComplete: function () {
var rowIds = jQuery("#gridList").jqGrid('getDataIDs');
for (var k = 0; k < rowIds.length; k++) {
var curRowData = jQuery("#gridList").jqGrid('getRowData', rowIds[k]);
var curChk = $("#" + rowIds[k] + "").find(":checkbox");
curChk.attr('name', 'check_box_' + curRowData['ID']);   //给每一个checkbox赋名字
curChk.attr('value', curRowData['ID']);   //给checkbox赋值
curChk.attr('style', 'margin:7px;');
}
},
//加载完成模拟复选框的点击事件
loadComplete: function (xhr) {
var rowArray = xhr.rows;
if (selectedIds.length > 0) {
var count = 0;
$.each(rowArray, function (i, item) {
if (selectedIds.indexOf(item.ID.toString()) > -1) {
//判断arrayNewList中存在item.Id值时,选中前面的复选框,
$("[name='check_box_" + item.ID + "']").trigger('click');
count++;
}
});
if (rowArray.length == count) {
$("#cb_gridList").prop("checked", true);
}
}
},
//全选触发事件
onSelectAll: function (aRowids, status) {
var rowData = $(this).jqGridRowValue();//操作行
var pageRowData = $(this).getRowData();//当前列表所有行
if (status == true) {
//循环aRowids数组,将Id放入selectedIds数组中
saveData(rowData);
} else {
deleteIndexData(rowData, pageRowData);
}
},
//选中某行触发事件
onSelectRow: function (aRowids, status) {
var rowData = $(this).jqGridRowValue();//操作行
var pageRowData = $(this).getRowData();//当前列表所有行
if (status == true) {
if (rowData.length == $(this)[0].rows.length - 1) {
$("#cb_gridList").prop("checked", true);
}
saveData(rowData);
} else {
deleteIndexData(rowData, pageRowData);
}
}
});
}; //将Id放入selectedIds数组中
function saveData(obj) {
$.each(obj,
function (i, item) {
if (selectedIds.indexOf(item.ID) < 0)
selectedIds.push(item.ID);
});
} //将Id从selectedIds中删除 (仅删除当前页面列表中的数据)
function deleteIndexData(obj,pageObj) {
var rowDataIds = [];
var pageRowDataIds = [];
$.each(obj,
function (i, item) {
rowDataIds.push(item.ID);
});
$.each(pageObj,
function (i, item) {
pageRowDataIds.push(item.ID);
});
$.each(selectedIds,
function (i, sItem) {
if (pageRowDataIds.indexOf(sItem)>0 && rowDataIds.indexOf(sItem) < 0) {
selectedIds.splice(i, 1);
i--;
}
});
}

辅助代码:

$.fn.jqGridRowValue = function () {
var $grid = $(this);
var selectedRowIds = $grid.jqGrid("getGridParam", "selarrrow");
var json = [];
var rowData;
if (selectedRowIds != "") {
var len = selectedRowIds.length;
for (var i = 0; i < len; i++) {
rowData = $grid.jqGrid('getRowData', selectedRowIds[i]);
json.push(rowData);
}
} else {
if (!!$grid.jqGrid('getGridParam', 'selrow')) {
rowData = $grid.jqGrid('getRowData', $grid.jqGrid('getGridParam', 'selrow'));
json.push(rowData);
}
};
return json;
}

jqGrid 跨页选择以及回显的处理的更多相关文章

  1. 关于【vue + element-ui Table的数据多选,多页选择数据回显,分页记录保存选中的数据】的优化

    之前写的[vue + element-ui Table的数据多选,多页选择数据回显,分页记录保存选中的数据]这篇博客.功能虽然实现了相对应的功能.但是用起来很不爽.所以进行了优化. 备注:最近可能没时 ...

  2. vue + element-ui Table的数据多选,多页选择数据回显,分页记录保存选中的数据。

    业务的需要:我要对与会人员勾选,记录所选的与会人员,并且点击到别的页面上时也要记录所勾选的.第一次尝试,每次点击下一页数据都会清空.然后我就去element ui官网查看了api.实现如下: 在tab ...

  3. 选择company回显appname

    function showSupCompany() { var obj = {}; obj.label = ScompanyId.getSelectedLabel(); obj.value = Sco ...

  4. easyui datagrid 跨页选择

    $.fn.extend( memberList ,{ quickSearch : function() { var time1 = new Date(); /* this.datagrid.datag ...

  5. elementUITable的多选框:分页选择数据回显,分页保存选中的数据。

    <template> <el-table @selection-change="handleSelectionChange" :row-key="get ...

  6. JSP页面批量选择&全选操作&选择回显

    效果如下: js验证部分: 页面body部分: 附:控制器Controller中验证批量选择条件回显:

  7. jsp页面数据回显(select下拉选择框)

    1.静态变量方式: <!-- 实现select标签回显 --> 1.<select name="curStatus" value="${curStatu ...

  8. layui table 跨页记忆选择

    layui 表格功能目前默认不支持跨页记忆选择 下面来实现layui table跨页记忆选择实现 基于layui版本 1.4.5 表格跨页通用方法 //表格分页复选框 layui.define(['j ...

  9. Vue ElementUI Tree组件 回显问题(设置选择父级时会全选所有的子级,有此业务场景是不适合的)

    业务场景下有这样的问题 业务需求需要保存前端 半选节点 解决方案 let checked = this.$refs.menuTree.getCheckedKeys(); //此方法获取半选节点 let ...

随机推荐

  1. JFreeChart插件

    JFreeChart的核心对象. 1. 制图对象 JFreeChart的类是制图对象.常用方法: 方法 说明 Void setAntiAlias(Boolean flag) 设置字体边界模糊 Void ...

  2. Jquery实现超酷的时间轴特效

    Timeline时间轴Jquery特效是一款现在互联网上非常流行的一种布局结构,结合了瀑布流布局,最近很多网友问到这种特效,网站上有网友们分享过一款,功能虽然实现,但样式不太好看,今天就把它整理出来分 ...

  3. HTML5坦克大战

    在JavaScript中,不要在变量为定义之前去使用,这样很难察觉并且无法运行. 颜色不对. 当我的坦克移动时,敌人坦克消失. tankGame3.html <!DOCTYPE html> ...

  4. python3 字典属性

    1.字典创建 >>> D={} >>> D {} >>> D2={:,(,):::'d'}} #冒号构造 1.使用 {  }和 : 直接创建 &g ...

  5. FFmpeg基础知识之————H264编码profile & level控制

    H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseline Profile:基本画质.支持I/P 帧,只支持无交错(Progressive)和 ...

  6. ubuntu 上采用nginx做rtmp 直播 服务器

    首先安装必要的依赖库   sudo apt-get install autoconf automake sudo apt-get install libpcre3 libpcre3-dev   安装 ...

  7. LOJ2305 「NOI2017」游戏

    「NOI2017」游戏 题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行$n$场 ...

  8. XML的二十个热点问题

    这些日子,几乎每个人都在谈论XML (Extensible Markup Language),但是很少有人真正理解其含义.XML的推崇者认为它能够解决所有HTML不能解决的问题,让数据在不同的操作系统 ...

  9. Guava手记

    Cache Guava的Cache封装的功能比较全面,但是很多地方和设想的不太一样,最明显的就是RemovalListener,它并不是invalid之后就会被调用,因为在调用Cache的invali ...

  10. 洛谷【P2115】[USACO14MAR]破坏Sabotage

    我对二分的理解:https://www.cnblogs.com/AKMer/p/9737477.html 题目传送门:https://www.luogu.org/problemnew/show/P21 ...