我有一个jqGrid,它使用订单号作为网格的关键字段。用户可以在页面上的文本框中输入订单号,我需要"搜索"通过网格,查看输入的值是否与网格的任何行匹配。然后,如果它,我想选择网格行,如果它不想我将该密钥转储到页面上其他地方的隐藏字段。
据我所知,通过搜索网格生成的表格似乎只有一种方法可以做到这一点。
$("#list > tbody > tr:has(td:contains('" + str + "'))");
但是,这样做只会搜索网格的当前页面,而不是整个网格数据(感谢分页)。那么我希望能够调用setSelection方法并捕获是否在jqGrid中找不到传递的密钥。
$(this).jqGrid('setSelection', idOfSelectedRow);
但是调用setSelection方法会返回整个jquery对象,即使找不到传递的id(如文档中所述,这是我的错误)。
所以,这就是我陷入困境的地方。我需要能够搜索整个网格'寻找钥匙的数据。如果需要,我可以更多地阐述我的实施。
答案 0 :(得分:0)
所以,在深入研究文档后,我相信我找到了更好的方法。
var orderNum = $('#tbUserInput').val();
var gridData = $('#GridData').jqGrid('getGridParam', 'data');
var gridDataRow = $.grep(gridData, function (e) { return e._id_ == orderNum; });
if (gridDataRow.length > 0) {
var selRowIds = $('#GridData').jqGrid("getGridParam", "selarrrow");
if ($.inArray(gridDataRow[0]._id_, selRowIds) < 0) {
$('#GridData').jqGrid('setSelection', gridDataRow[0]._id_, true);
}
}
else {
AddSelectedOrder(orderNum, $('[id*=hfSelectedOrders]'));
}
首先,我抓住用户的输入,然后从网格参数获取整个jqGrid数据对象(在今天之前从未了解过)。之后,我决定使用.grep在网格数据数组中查找id ==用户输入的对象。假设grep成功,gridDataRow将具有非零长度(并且由于订单号是jqgrid中的关键字段,我可以假设长度始终为1,从不更多)。
接下来,我直接从网格获取selectedRowIds数组(此网格已进行多选)。然后,如果在selectedRows数组中找不到网格数据的id,我将触发jqGrids的setSelection来选择行。
最后一个else块只是将订单号添加到隐藏字段。
似乎工作。如果有其他人遇到这个问题,我希望这有帮助!
编辑只是一张纸条,我有 if($ .inArray(gridDataRow [0]。 id ,selRowIds)&lt; 0) 检查是否尚未选择该行。如果是,我不想取消选择(客户要求它以这种方式行事)。如果您最终使用此代码,您可能希望删除该IF检查并简单地调用setSelection,以便切换该行的选择。