思路:定义全局的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. 二 Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

  2. spring与mybati整合方法

    (1)spring配置文件: <!-- 引入jdbc配置文件 --> <context:property-placeholder location="jdbc.proper ...

  3. jmeter 多压力机并发测试过程

    要实现多台压力机并发,就必须有多台服务器上安装了jmeter程序包,首先把一台服务器作为主压力机,测试脚本放到这台机器上,主压力机与从压力机在同一局域网中,服务器之间可以ping通 第一步:在linu ...

  4. cudnn 卷积例子

    运行环境:linux cuda cudnn cudnn API:https://docs.nvidia.com/deeplearning/sdk/cudnn-developer-guide/index ...

  5. BLOB (binary large object)

    BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型. BLOB是一个大文件,典型的BL ...

  6. 使用 py2exe 打包 Python 程序

    上回在<使用 PyInstaller 打包 Python 程序>中,我们介绍了使用 PyInstaller 对 Python 程序进行打包,今天带大家认识一个新的工具:py2exe. 接下 ...

  7. 【LeetCode】048. Rotate Image

    题目: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwis ...

  8. Oracle 12c 多租户在 CDB 中 Plug A PDB,Unplugging A PDB

    Oracle 数据库 12 c 中介绍了多租户选项允许单个容器数据库 (CDB) 来承载多个单独的可插拔数据库 (PDB).本文简单的演示了如何在 CDB 中 Plug A PDB,Unpluggin ...

  9. javascript中string的用法总结

    javascript中很经常的会用到string类型的变量,对此,总结了几种常用操作或者方法:创建.拼接.子串.大小写转换.判断字符串相等.字符串查找等几种.下面将一一简单描述. 一.js中strin ...

  10. poj 2000 Gold Coins(水题)

    一.Description The king pays his loyal knight in gold coins. On the first day of his service, the kni ...