javascript - 如何在 jqGrid 中加载详细网格时禁用主网格 rowSelect?

标签 javascript jquery jqgrid

我有一个主细节jqGrid,它工作得很好。详细网格是根据主网格所选行中的单元格值以及对 API 的 ajax 调用(即 datatype: 'json'url: 'http://myServiceurl/rowdata)填充的.id'.

但是,对于某些主行,详细信息行的数据集因此需要一些时间来加载,并且详细信息网格显示“正在加载...”。这完全没问题,直到用户单击主网格中的不同行,而详细网格仍为“正在加载...”。这是一个问题,因为我正在详细信息网格的 caption 上加载一些附加信息,而详细信息网格上的数据仍在从上一行加载,选择详细信息网格的标题更改以反射(reflect)当前选定的主网格的行但实际的表数据来自主网格中选择的上一行。

主从网格的编码如下主网格上的jqgrid选项-

onSelectRow: function(ids) {      //load the detail table tabDiv2
                $("#"+divToHide).show();    //show the hidden div for detail grid
                var rowdata = jQuery("#"+tabDiv).getRowData(ids);
                    jQuery("#"+tabDiv2).jqGrid('setGridParam',{url:useruri+"/"+rowdata.dbsid,
                                                           datatype: 'json'})
                    jQuery("#"+tabDiv2).jqGrid('setCaption',"Database Name: "+rowdata.dbname)
                    .trigger('reloadGrid');
                },

我可以想象的一个解决方案是在主网格上使用 beforeSelectRow 选项并检查详细网格是否仍在加载 -

beforeSelectRow: function(){
       //check if detail grid is fully loaded <--
       //if fully loaded return true else return false
}

如何检查详细网格是否已完全加载?我已经尝试过 $("#"+tabDiv2)[0].grid 但它总是返回 true,因为我认为网格的整体 DOM 元素在数据加载到其中之前加载。我尝试使用 $("#"+tabDiv2).getGridParam("records") 检查记录数,但这可能并不总是有效,因为详细网格没有选定主网格的任何行row 是一个有效的场景,并将永久禁用主网格上的 rowSelect。我还有什么选择?

最佳答案

在加载网格的 Ajax 请求挂起期间,jqGrid 将 $("#"+tabDiv2)[0].grid.hDiv.loading 设置为 true。然后您可以在第一个网格中使用以下回调

beforeSelectRow: function () {
    var detailGrid = $("#"+tabDiv2)[0];
    return detailGrid != null && detailGrid.grid != null && detailGrid.grid.hDiv.loading ?
        false : true;
}

关于javascript - 如何在 jqGrid 中加载详细网格时禁用主网格 rowSelect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43535559/

相关文章:

jquery - 如何使用具有多个值的 @Html.DropDownList

javascript - JQuery Chosen 插件 - 获取所选选项的 ID

javascript - document.write动态加载脚本

javascript - 检测正则表达式中多次出现非空白的正确方法是什么?

javascript - 数据表 - 更新属性数据

layout - 将jqgrid对话框(表单编辑对话框)分为两个布局

jquery - 如何从 jqGrid 列获取单元格值以对背景色进行条件格式设置

jquery - 在 jqGrid 中过滤并将背景颜色应用于 tr

javascript - 再次调用 setTimeout 停止第一个实例

javascript - 如果文本等于特定值则启动函数