(jqGrid) 查找单击的行号时出错

(jqGrid) Error when finding clicked row number

function drawTable(url){
        $('#reportList').jqGrid('GridUnload');

        $('#reportList').jqGrid({
            url: url,
            mtype: 'GET',
            datatype: 'json',


            colNames:['num','section1','section_detail','product','product_description','status','rate','start_date','end_date','issue','in_charge','write_date','view'],
            colModel:[
                {name:'num', index:'num', hidden:true},
                {name:'section1', index:'section1',  width:60},
                {name:'section2', index:'section2'},
                {name:'product', index:'product', width:90},
                {name:'product_description', index:'product_description'},
                {name:'status', index:'status', width:50},
                {name:'rate', index:'rate', width:50},
                {name:'start_date', width:90, index:'start_date'},
                {name:'completion_date', width:90, index:'completion_date'},
                {name:'issues', index:'issues'},
                {name:'in_charge', index:'in_charge', width:80},

                {name:'writedate', index:'writedate',width:90},
                {name:'rewrite', index:'rewrite', width:60, formatter: function addButton(cellvalue, options, rowobject){


                return "<input class='btnEdit' type='button' value='view' onClick='editReport.call(this)'/>" 

                }}
            ],

            pager: '#pager',
            sortname: 'section1',
            sortorder: 'DESC',
            multiselect: false,
            rownumbers: true,
            rowNum:50,
            loadonce: true,
            multiselect:true,
            gridComplete: function(){


            }

        });

    }

    function editReport(){

        //get row number
        var clickedRow = $(this).closest("tr.jqgrow").attr("id");

        var ids = jQuery('#reportList').jqGrid('getDataIDs');

        // get row object with row num
        var rowId=ids[clickedRow-1];
        var rowData = jQuery('#reportList').jqGrid('getRowData', rowId);

        getReportInfo(rowData.num)
  }

您好,我正在使用 Spring 框架制作简单的报告程序。 为了显示所有注册的报告,我应用了 jqGrid(它是 13 列 table)以获得更好的用户界面。除了 'num' 和 'view' 之外的所有列都显示报告的详细信息。列 'num' 是隐藏信息,用于从数据库中检索所有其他信息。最右边的列 ('view') 是一个按钮,用于查看子 window.
中报告的详细信息 在函数 'editReport' 中,我通过找到点击的行号得到报告的 'num'。

我看起来很好。但是,当我设置每页 15 行并更改为第 2 页时,'clickedRow' 的变量生成错误的数字。单击第 2 页的第一行时,我期望 1,但它 returns 16.. 因此,它无法从单击的行中获取 'num' 并生成错误..

editReport的代码不正确。值 $(this).closest("tr.jqgrow").attr("id") 而不是行索引 。根据定义,它是 rowid。您根本不需要使用 getDataIDs。您可以使用 var rowId = $(this).closest("tr.jqgrow").attr("id"); 代替,然后将该值用作 getRowData 或其他方法中的任何选项。

此外,如果 num 列包含 唯一的 值(所有行中的值都不同),那么您可以添加 key: true 属性在 colModelnum 列的列定义中。它将通知 jqGrid 使用列中的值作为 rowid(<tr> 元素的 id 属性的值)。另一种方法是添加 jsonReader: { id: "num" },但要确保该方法有效,您应该包括来自 url 的 JSON 响应示例(至少一行或 JSON数据)。此外,重要的是要知道您使用的是哪个 version jqGrid 以及来自哪个 fork jqGrid(free jqGrid, commercial Guriddo jqGrid JS 或版本中的旧 jqGrid <=4.7).