识别值是否与 jqGrid 数据中的任何键匹配的正确方法是什么?

What is the proper way to identify if a value matches any key in the data of a jqGrid?

我有一个 jqGrid,它使用订单号作为网格的关键字段。用户可以在页面上的文本框中输入订单号,我需要 "search" 通过网格并查看输入的值是否与网格的任何行匹配。然后,如果需要,我想 select 网格行,如果不需要,我想将该键转储到页面其他地方的隐藏字段中。

据我所知,似乎只有一种方法可以通过搜索网格生成的 table 来实现。

$("#list > tbody > tr:has(td:contains('" + str + "'))");

但是,这样做只会搜索网格的当前页面,而不是整个网格数据(感谢分页)。因此,如果在 jqGrid 中找不到传递的密钥,我希望能够调用 setSelection 方法并捕获。

$(this).jqGrid('setSelection', idOfSelectedRow);

但是调用 setSelection 方法 returns 整个 jquery 对象,即使没有找到传递的 id(如文档中所述,那是我的错)。

所以,这就是我有点卡住的地方。我需要能够搜索整个网格的数据以查找密钥。如果需要,我可以详细说明我的实现。

所以,在仔细研究文档之后,我相信我找到了更好的方法。

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 数组(此网格上有 multiselect)。然后,如果在 selectedRows 数组中找不到来自网格数据的 id,我将触发 jqGrids 的 setSelection 到 select 该行。

最后一个 else 块只是将订单号添加到隐藏字段。

似乎有效。如果其他人遇到这个问题,我希望这对您有所帮助!

edit 只是一个注释,我有 如果 ($.inArray(gridDataRow[0].id, selRowIds) < 0) 检查该行是否尚未 selected。如果是,我不想取消 select 它(客户要求它以这种方式运行)。如果您最终使用此代码,您可能希望删除该 IF 检查并简单地调用 setSelection 以便它将切换该行的 selection。