我必须遗漏一些东西,因为我有另一个以相同方式构建的控件,但没有这个问题。我有一个jQuery网格控件,通过.NET的registerClientScriptInclude注册。两个网格上的所有内容都正常工作,但我正在调用Datatables KeyTable库中的一个函数,当用户键入网格并到达表行的最末端时,它会强制页面更改,将它们移动到下一页。
当我注册这些控件时,它看起来像这样:
var lookupGrid = registerGrid('pageContent_tbl1',...)
var lookupGrid2 = registerGrid('pageContent_tbl2',...)
网格代码位于嵌入式资源的JS文件中:
var registerGrid = function (table, ...) {
grid = {
"oTable": $("#" + table).dataTable({
"bProcessing": true,
...
}),
"focusPostDraw": function (position) {
var drawCB = function () {
if (position === 'top') {
keys.fnSetPosition($('#' + table + " tbody tr:first td.canEdit:first ")[0].cellIndex, 0);
keys.fnRemoveFocus($('#' + table + " tbody tr:last td.canEdit:last "));
} else if (position === 'bottom') {
var oSettings = inlineGrid.oTable.fnSettings();
keys.fnSetPosition($('#' + table + " tbody tr:last td.canEdit:last ")[0].cellIndex, oSettings._iDisplayLength - 1);
keys.fnRemoveFocus($('#' + table + " tbody tr:first td.canEdit:first "));
} else {
// Do Nothing
}
grid.setInlineGridHandler(function () { });
};
grid.setInlineGridHandler(drawCB);
}
};
return grid;
}
当我调用focusPostDraw时,一切看起来都很棒,但是当我调用时:
grid.setInlineGridHandler(drawCB);
网格变量实际上指向网格的lookupGrid2实例,而不是lookupGrid。奇怪的是,table变量设置为lookupGrid表变量的ID。到底是怎么回事?有人有任何想法吗?
答案 0 :(得分:0)
在范围内声明变量。您的js文件应包含:
var registerGrid = function (table, ...) {
var grid = {
"oTable": $("#" + table).dataTable({
"bProcessing": true,
...
}),
"focusPostDraw": function (position) {
var drawCB = function () {
if (position === 'top') {
keys.fnSetPosition($('#' + table + " tbody tr:first td.canEdit:first ")[0].cellIndex, 0);
keys.fnRemoveFocus($('#' + table + " tbody tr:last td.canEdit:last "));
} else if (position === 'bottom') {
var oSettings = inlineGrid.oTable.fnSettings();
keys.fnSetPosition($('#' + table + " tbody tr:last td.canEdit:last ")[0].cellIndex, oSettings._iDisplayLength - 1);
keys.fnRemoveFocus($('#' + table + " tbody tr:first td.canEdit:first "));
} else {
// Do Nothing
}
grid.setInlineGridHandler(function () { });
};
grid.setInlineGridHandler(drawCB);
}
};
return grid;
}
除非您这样做,否则您的grid
引用将是一个名为grid
的未定义document.window级变量。第二次运行该函数时,您将覆盖该变量及其对它的引用。