解决"var rows = $('#dg').datagrid('getSelections');" rows.length总是为1的问题

文章详细介绍了在使用EasyUI的Web项目中,如何正确配置多选复选框以准确获取选中项。通过调整idField与表头字段保持一致,确保在多选情况和未选情况下都能正确统计选中的记录数量。
1. 问题描述
	在使用到easyui的web项目中, jsp页面中涉及到复选框多选的问题的, 其中jsp页面有以下js语句 :"var rows = $('#dg').datagrid('getSelections');", 得到的rows.length在多选情况下总为1, 不选择时为0.
2. 解决方法
	原因在于, 如下
<table id="dg" title="版块列表" class="easyui-datagrid" style="width: 1500px;"
	toolbar="#toolbar" pagination="true" url="board!getAllBoard.action"
		rownumbers="true" fitColumns="true" singleSelect="false" idField="board_id">
	<thead>
		<tr>
			<th data-options="field:'ck'" width="50px" align="center" checkbox="true"></th>
			<th data-options="field:'board_id', hidden:true" width="50px" align="center">id</th>
			<th data-options="field:'boardName'" width="140px" align="center">版块名称</th>
			<th data-options="field:'boardDesc'" width="200px" align="center">版块说明</th>
			<th data-options="field:'boardPic'" width="240px" align="center">版块图片路径</th>
			<th data-options="field:'order'" width="70px" align="center">显示顺序</th>
			<th data-options="field:'isHidden'" width="70px" align="center">是否显示</th>
			<th data-options="field:'parentBoardId'" width="90px" align="center">父版块ID</th>
		</tr>
	</thead>
		
</table>
<div id="toolbar">
	<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newBoard()">新 增</a>
	<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editBoard()">编 辑</a>
	<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyBoard()">删 除</a>
</div>
上面的idField="board_id"要与下面的 <th data-options="field:'board_id', hidden:true" width="50px" align="center">id</th> 中的 field:'board_id'的board_id要保持一致, 这样才能以此为根据统计出已选中有多少条记录。 


                
var toolbar = [{ text:'删除', iconCls:'icon-cut', handler:function(){ var rows = $('#table-m1').datagrid('getSelections'); for (let i = 0; i < rows.length; i++) { var row = rows[i]; var index = $('#table-m1').datagrid('getRowIndex',row); var originalRows = $('#table-m1').datagrid('getData').originalRows; $('#table-m1').datagrid('deleteRow',index) originalRows = originalRows.filter(function (item) { return item.id !== row.id; }) $('#table-m1').data('datagrid').originalRows = null; $('#table-m1').datagrid('loadData',originalRows) } } },]; var options = { tableName: "orderCustomInvoice",//表名 toolbar:toolbar,//工具栏 columns: cols,//列 data: [], pagination: true,//是否使用分页 pageSize:25, pageList: [25,50,100,150], nowrap : true,//设置为true,当数据长度超出列宽时将会自动截取 striped : true,//设置为true将交替显示行背景。 collapsible : true,//显示可折叠按钮 fitColumns:true,//允许表格自动缩放,以适应父容器 rownumbers:true, remoteSort: false,//排序必填(是否在后端排序的基础上排序) sortOrder: 'asc,asc',//排序方式 sortName: "sap_sn,order_seq",//排序字段 multiSort: true,//定义是否启用多列排序 loadFilter:pagerFilter, callback: function (data) {//回调, } }; //初始化列表 initEasyUiTable('#table-m1', options); //客户端分页,美化明细表 function pagerFilter(data){ if (typeof data.length == 'number' && typeof data.splice == 'function') { // is array data = { total: data.length, rows: data } } //这个函数为每次表格加载数据的过滤函数,data中包含原始数据,返回的是真正要显示出来的数据 //获取Datagrid对象 var dg = $(this); //获取选项对象,此处该对象用于保存分页时的相关信息 var opts = dg.datagrid('options'); //获取分页器 var pager = dg.datagrid('getPager'); //重写表格所使用分页器的onSelectPage方法,此方法在用户选择新的页面时触发,即改变pageNum或pageSize时触发 //此处真正的翻页逻辑并不在onSelectPage方法里面,可以看到在该方法中仅仅是将新页面的参数(pageNum, pageSize)保存在opts对象中, //这两个参数在后面的代码中被使用 pager.pagination({ onSelectPage:function(pageNum, pageSize){ opts.pageNumber = pageNum; opts.pageSize = pageSize; //下面注释的代码我暂时不明白有什么作用,没有他们分页功能仍然能够正确实现 // pager.pagination('refresh',{ // pageNumber:pageNum, // pageSize:pageSize // }); //此处loadData方法会加载本地数据,即data中的数据,data中包含有初次加载的所有数据 dg.datagrid('loadData',data); //上述方法执行时会被pagerFilter拦截到,并对初始数据进行筛选,以达到分页的效果 }, layout:['list','sep','first','prev','sep','links','sep','next','last','sep','refresh'] }); //真正的分页逻辑 //第一次进入pagerFilter函数时,data中只有rows中保存了数据,并无originalRows属性,实现客户端分页时,需要在一开始将这些数据保存在 //originalRows中,成为后续分页的基础数据,所以只要originalRows属性存在且不为空,分页时的基础数据便一直是originalRows中保存的数据 if(!data.originalRows){ data.originalRows =(data.rows); } //取出选择新的页面时,新页面的参数,前面已经保存在opts对象中了 var start =(opts.pageNumber-1)*parseInt(opts.pageSize); var end = start + parseInt(opts.pageSize); //下面对初始数据进行筛选,并将结果放在data.rows中,页面每次加载时只会显示data.rows中的数据 data.rows =(data.originalRows.slice(start, end)); //返回data,完成分页 data.content = (data.originalRows.slice(start, end)); data.pageable = {"pageNumber":opts.pageNumber,"pageSize":opts.pageSize,"searchCount":false}; data.pageNumber = opts.pageNumber; data.pageSize = opts.pageSize; data.totalPages = Math.ceil(data.total / data.pageSize); // console.log(data); return data; }
08-07
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值