在过去的几天里,我一直在撕掉我的头发。就像问题的简要概述一样。我正在使用JqGrid 4.2.0(写作时的最新版本)。在一个页面中,我有两个网格。一个在左边,希望充当导航员。我想在右侧网格中加载数据,数据由左侧单击的项目的行ID确定。JQGrid使用OnSelectRow在另一个网格上加载数据
我的问题是,第一个选定的行ID会“卡住”,并且将来所有的ajax调用都是相同的rowid(例如:如果第一个选定行是514,则每个其他选定行将在ajax调用上输出514加载其他网格,如果第一次被选中是513,所有其他513等)
我怀疑它可能是某种变量交叉或某些因为我在整个执行期间放置了警报调用以进行测试,并且它们都提醒正确ID号,直到下一个网格被加载的点,此时行ID变成错误的。
这里是下面我的代码:
第一段左侧与OnSelectRow呼叫初始列表,和代码的第二部分是用于在其上实际工作保持数据)的右手侧的数据格
renderImportsList = function(url, data, firstrow) {
var cnames = data.names;
var cmodel = data.model;
currentrow = firstrow;
$("#imports_grid").jqGrid({
url: url + "&type=list",
//caption: "Imports",
datatype: "json",
colNames: cnames,
colModel: cmodel,
recordtext: "<b>Imports: {1}</b>",
autowidth: true,
rowNum: 10000,
toolbar: [true,"top"],
pager: "#imports_grid_pager",
pgbuttons: false,
pginput: false,
viewrecords: true,
multiselect: false,
sortorder: "desc",
sortable: true,
onSelectRow: function(rowid) {
if (rowid != firstrow) {
if ($("#" + firstrow).hasClass("ui-state-highlight"))
$("#" + firstrow).removeClass("ui-state-highlight")
}
setTimeout(function() {
// Display import items
var itype = "checkpoint";
alert(rowid); // This returns the right row ID so far
renderImportItems(url, rowid, itype);
}, 500);
},
loadComplete: function() {
$("#imports_grid tr").css("border-color", "#666");
$("tr.jqgroup").css("background", "#e9efff");
$("tr.jqfoot").css("background", "#ced5e9");
$("#imports_grid tr.jqfoot td").css("border-right", "none");
$("#t_imports_grid").css("padding-bottom", "3px");
$("#imports_grid").setSelection(firstrow, true);
$("#imports_grid").trigger("reloadGrid"); // Call to fix client-side sorting
}
});
$("#imports_grid").jqGrid('navGrid','#imports_grid_pager',{edit:false,add:false,del:false,search:false});
$("#imports_grid").trigger("reloadGrid"); // Call to fix client-side sorting
sizeGrid("imports_grid");
}
这部分执行罚款,在这个阶段,ROWID是我点击,根据上面放置警告。下面是在上面的函数中从OnSelectRow中调用的第二个函数。
renderImportItems = function(url, rowid, itype) {
$.ajax({
url: srvrname + "applications/PMS/views/view/imports/" + itype + ".php",
success: function(data) {
var cnames = data.names;
var cmodel = data.model;
alert(rowid); // Here, the code still executes the right row ID
$("#checkpoint_grid").jqGrid({
url: url + "&rid=" + rowid + "&type=" + itype,
// This is where it breaks. No matter what, I keep getting rowid to equal whichever row was selected the very first time the grid was clicked (or loaded programatically onload)
datatype: "json",
colNames: cnames,
colModel: cmodel,
recordtext: "<b>Total: {1}</b>",
autowidth: true,
rowNum: 500,
pager: "#" + itype + "_grid_pager",
pgbuttons: false,
pginput: false,
viewrecords: true,
multiselect: false,
sortorder: "desc",
sortable: true,
loadComplete: function() {
$("#" + itype + "_grid tr").css("border-color", "#666");
$("tr.jqgroup").css("background", "#e9efff");
$("tr.jqfoot").css("background", "#ced5e9");
$("#" + itype + "_grid tr.jqfoot td").css("border-right", "none");
$("#" + itype + "_grid").trigger("reloadGrid"); // Call to fix client-side sorting
}
});
$("#" + itype + "_grid").jqGrid('navGrid','#' + itype + 'grid_pager',{edit:false,add:false,del:false,search:false});
$("#" + itype + "_grid").trigger("reloadGrid"); // Call to fix client-side sorting
sizeGrid(itype + "_grid");
}
});
}
正如你可以在上面看到:在处第一个警报被称为点;它仍然输出正确的ID号码,但一旦第二个网格被初始化;该ID返回到第一次呼叫时初始设定的值。
提供的任何帮助将不胜感激。如果有帮助,这里有一些萤火输出来证明这个问题...
(域名隐私删除)
(先装:方案:FIRSTROW选择= 514) 响应://mydomain.com /views/view/grid.php?rid=514 &类型=关卡& _search =假& ND = 1321336809180个&行= 500 &页= 1 & SIDX = & SORD =降序
(已点击行:选择的行= 503) 回应:// mydo main.com/views/view/grid.php?rid=514 &类型=关卡& _search =假& ND = 1321336863994个&行= 500 &页= 1 & SIDX = & SORD =降序
(点击的行:选定的行= 510) 回应://mydomain.com/views/view/grid.php?摆脱= 514 &类型=关卡& _search =假& ND = 1321336864848个&行= 500 &页面= 1 & SIDX = & SORD =递减
这完成了绝招,谢谢! – Preller