好吧,这一定是愚蠢的,但我没能发现它......
我有一个 id 为“grid”的 jqGrid(我知道是受启发的)。我正在向网格中添加一个导航按钮,如下所示:
jQuery("#grid").navButtonAdd('#pager', {
caption : "Manage Files",
onClickButton : function(){
var rowid = $('#grid').jqGrid('getGridParam', 'selrow');
if(rowid == null)
alert('Please select a record before trying to manage files');
makeUploadDialog(rowid);
}
});
所以,这行得通。你第一次这样做。如果您单击另一行并再次单击该按钮,我会收到此错误:
Uncaught TypeError: Object [object Object] has no method 'jqGrid'
我猜想事件的排序有一些不好的魔力,但我知道我已经在堆栈帖子中看到了 Oleg 使用的这种确切方法(尽管是 2 岁的)。
有什么建议么?
[编辑以添加更多代码和上下文]
我发现这个问题是由对话框内容的 AJAX 加载以某种方式触发的。我已经在其他项目上完成了这种类型的操作而没有问题,所以我很困惑为什么在这种情况下它会导致我“失去上下文”。如果我注释掉下面的最后一行...加载调用,我可以反复打开和关闭对话框并保持网格功能。我只是不明白为什么...
function makeUploadDialog(rowID) {
var dialog = $('<div></div>').appendTo('body');
dialog.dialog({
width: 850,
autoOpen: true,
draggable: true,
resizable: false,
title: 'Manage Artifacts',
buttons: {
Close: function () {
$("#grid").trigger("reloadGrid");
dialog.remove();
}
},
close: function () {
$("#grid").trigger("reloadGrid");
dialog.remove();
}
});
dialog.load('getUploadDialog.html?rowId='+rowID);
[编辑 x2]
我刚刚发现#grid 对象似乎已被#.load 以某种方式损坏?我做了一个 $('#grid') 的 console.log,可以看到它实际上缺少所有 jqGrid 方法,但有一些内容似乎属于对话框(比如对 MultiFile 对象的引用。 ..这是 MultiFile.js 的一部分,在对话框本身中用于某些文件上传)。真是令人费解。