jqGrid使用multiselect翻页时保持选中状态

本文介绍如何在jqGrid表格中实现翻页后保持checkbox选中状态的方法,通过自定义数组存储选中项信息,确保在翻页操作后仍能保留用户的选择,适用于大量数据展示场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用场景:表单需要提加jqGrid表格中选中的行的id,而表格由于数据太多需要翻页,但每次选中checkbox翻页再翻回来之前选中的消失了。所以需要做到翻页后再回来之前选中的checkbox继续保持选中状态。

1.首先,要让表格出现checkbox选择框列,需要添加multiselect属性

2.其次:需要了解onSelectAll,onSelectRow,loadComplete三个事件

3.思路:需要自定义一个全局选中项的数组checkArray和全局的页码pageNum,在哪个页面选中时,要将页码和选中的rowId全都保存进数组里,当表格加载时,再根据数组中的记录找到对应页面的rowId让其变成选中状态。

注:由于让checkbox保持选中只是看起来好看,实际我是要提交选中的行的内容id,所以在数组项中我添加了三个参数:页码,rowId,内容id:{"pageNum":pageNum,"rowId":rowIds[i],"ID":rowData.warnAreaId};

4.代码

//设置全局变量选中的数组和当前页码
var checkArray=[];
var pageNum=1;
/**
 * 初始化DataGrid
 */
function initDataGrid() {
	$('#grid-table').jqGrid({
		url : $.cxt + "/coWarnArea/getAreaPeopleSettingList",
		datatype : "json",
		postData : {
			warnType:'4',
		},
		mtype : "POST",
		height : 'auto',
		autowidth : true,
		colNames : [ '案件编号','案件名称','归属地市','案件级别','开始时间', '结束时间' ],
		colModel : [ {
			name : 'warnAreaId',
			align : 'center',
			index : 'warnAreaId',
			editable : false,
		}, {
			name : 'warnAreaName',
			align : 'center',
			index : 'warnAreaName',
			editable : false,
			formatter : renderOperation
		}, {
			name : 'areaName',
			align : 'center',
			index : 'areaName',
			editable : false
		}, {
			name : 'caseLevel',
			align : 'center',
			index : 'caseLevel',
			editable : false
		}, {
			name : 'startDate',
			align : 'center',
			index : 'startDate',
			editable : false
		}, {
			name : 'endDate',
			align : 'center',
			index : 'endDate',
			search : false,
			sortable : false,
			editable : false,
		} ],
		viewrecords : true,
		rowNum : 10,
		rowList : [ 10, 20, 30 ],
		pager : '#grid-pager',
		altRows : true,
		
		multiselect : true,//添加这个属性可以出现选择checkbox
		//multiboxonly : false,
		onSelectAll:function(rowIds,status){  //选中全部时触发,rowIds为当页所有的rowId
			 //checkArray数组中把当页的全删除
			for(var i=0;i<rowIds.length;i++){
    			for(var j=0;j<checkArray.length;j++){
    				if(checkArray[j].pageNum==pageNum && checkArray[j].rowId==rowIds[i]){
    					checkArray.splice(j,1);
    					break;
    				}
    			}
			}
			//如果是选择的选中,则把当页所有条目加上
			if(status){
				 for(var i=0;i<rowIds.length;i++){
					 var rowData=$("#grid-table").jqGrid('getRowData', rowIds[i]);
					 var checkedItem={"pageNum":pageNum,"rowId":rowIds[i],"ID":rowData.warnAreaId};
					 checkArray.push(checkedItem)
				 }
		    }
			//console.log(checkArray)
	    },
	    onSelectRow:function(rowId,status){  //点击checkbox触发 rowId为当前触发的rowid
            //选中行的行数据
		 	var rowData=$("#grid-table").jqGrid('getRowData', rowId);
		    var checkedItem={"pageNum":pageNum,"rowId":rowId,"ID":rowData.warnAreaId};
		    if(status){
		    	//如果选中,则判断数组中如果没有的话加入数组
		    	for(var i=0;i<checkArray.length;i++){
		    		if(checkArray[i].pageNum==pageNum && checkArray[i].rowId==rowId ){
		    			return false;
		    		}
		    	}
		    	checkArray.push(checkedItem);
		    }else{
		    	//删除数组
		    	for(var i=0;i<checkArray.length;i++){
		    		if(checkArray[i].pageNum==pageNum && checkArray[i].rowId==rowId){
		    			checkArray.splice(i,1);
		    			break;
		    		}
		    	}
		    }
		    //console.log(checkArray)
	    },

	 	//每个页面加载时触发
		loadComplete : function(data) {
			//改变全局变量pageNum页码
			pageNum=data.page;
            //循环数组,让当页中的rowId变为选中状态
			for(var i=0;i<checkArray.length;i++){
				if(checkArray[i].pageNum==pageNum){
					$("#grid-table").jqGrid('setSelection', checkArray[i].rowId ,true);
				}
			}
			//console.log(checkArray)
		},
	});
	// JqGrid重新布局
	$(window).triggerHandler('resize.jqGrid');
	// JqGrid分页栏设置
	$('#grid-table').jqGrid('navGrid', '#grid-pager', {
		edit : false,
		editicon : 'ace-icon fa fa-pencil blue',
		add : false,
		addicon : 'ace-icon fa fa-plus-circle purple',
		del : false,
		delicon : 'ace-icon fa fa-trash-o red',
		search : false,
		searchicon : 'ace-icon fa fa-search orange',
		refresh : true,
		refreshicon : 'ace-icon fa fa-refresh green',
		view : false,
		viewicon : 'ace-icon fa fa-search-plus grey'
	})
}

选中的数组

6.提交数据时只需要循环数组,将其中的ID取出来就可以了

 

JqGrid中,获取特定行的选中状态可以通过以下步骤实现: 1. **初始化JqGrid**:首先,确保你已经正确初始化了JqGrid,并设置了相关的配置参数。 2. **设置选中事件**:使用JqGrid的事件绑定功能,绑定选中行的事件。 3. **获取选中状态**:通过JqGrid提供的API方法获取特定行的选中状态。 以下是一个示例代码,展示了如何获取特定行的选中状态: ```html <!DOCTYPE html> <html> <head> <title>JqGrid Example</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.5/css/ui.jqgrid.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.5/js/jquery.jqgrid.min.js"></script> </head> <body> <table id="grid"></table> <div id="pager"></div> <script> $(document).ready(function () { $("#grid").jqGrid({ url: 'your-data-url', datatype: "json", colModel: [ { label: 'ID', name: 'id', key: true, width: 75 }, { label: 'Name', name: 'name', width: 150 }, { label: 'Age', name: 'age', width: 75 } ], pager: "#pager", rowNum: 10, rowList: [10, 20, 30], sortname: 'id', sortorder: "asc", viewrecords: true, caption: "JqGrid Example", onSelectRow: function(rowid, status, e){ var rowData = $("#grid").jqGrid('getRowData', rowid); console.log("Row ID: " + rowid + " is " + (status ? "selected" : "unselected")); } }); }); </script> </body> </html> ``` 在这个示例中: 1. **初始化JqGrid**:通过`$("#grid").jqGrid`方法初始化JqGrid,并设置相关配置参数。 2. **设置选中事件**:使用`onSelectRow`事件绑定选中行的操作。 3. **获取选中状态**:在`onSelectRow`事件处理函数中,通过`status`参数获取选中状态
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆趣编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值