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

Javascript 确定值是否与jqGrid数据中的任何键匹配的正确方法是什么?,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我有一个jqGrid,它使用订单号作为网格的关键字段。用户可以在页面的文本框中输入订单号,我需要在网格中搜索,查看输入的值是否与网格中的任何行匹配。如果是,我想选择网格行,如果不是,我想将该键转储到页面其他地方的隐藏字段中 据我所知,似乎只有一种方法可以通过搜索网格生成的表来实现这一点 $("#list > tbody > tr:has(td:contains('" + str + "'))"); 但是,这样做只能搜索网格的当前页面,而不是通过分页搜索整个网格数据。因此,如果在jq

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

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

$("#list > tbody > tr:has(td:contains('" + str + "'))");
但是,这样做只能搜索网格的当前页面,而不是通过分页搜索整个网格数据。因此,如果在jqGrid中找不到传递的密钥,我希望能够调用setSelection方法并捕获它

$(this).jqGrid('setSelection', idOfSelectedRow);
但是调用setSelection方法会返回整个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,而不是更多

接下来,我将直接从这个网格的multiselect上获取selectedRowIds数组。然后,如果在selectedRows数组中找不到网格数据的id,我将触发jqGrids的setSelection来选择该行

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

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

编辑一张便条,我有 如果$.inArraygridDataRow[0].id,selRowId<0
检查该行是否尚未选定。如果是,我不想取消选择它,客户要求它这样做。如果您最终使用了此代码,您可能希望删除If check,并简单地调用setSelection,这样它将切换该行的选择。

因此,在深入研究文档之后,我相信我找到了一种更好的方法

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,而不是更多

接下来,我将直接从这个网格的multiselect上获取selectedRowIds数组。然后,如果在selectedRows数组中找不到网格数据的id,我将触发jqGrids的setSelection来选择该行

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

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

编辑一张便条,我有 如果$.inArraygridDataRow[0].id,selRowId<0 检查该行是否尚未选定。如果是,我不想取消选择它,客户要求它这样做。如果您最终使用了这段代码,您可能希望删除该If复选框,并简单地调用setSelection,这样它将切换该行的选择