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

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

本文关键字:方法 是什么 任何键 是否 jqGrid 数据 识别      更新时间:2023-09-26

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

据我所知,似乎只有一种方法可以通过搜索网格生成的表来做到这一点。

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

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

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

但是调用 setSelect 方法会返回整个 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,永远不会更多)。

接下来,我直接从网格获取 selectedRowId 数组(此网格已打开多选)。然后,如果在 selectedRows 数组中找不到网格数据中的 id,我将触发 jqGrid 的 setSelect 来选择该行。

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

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

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