【发布时间】:2011-08-27 20:49:29
【问题描述】:
jqGrid 内联编辑在单击下面的 onSelectRow 事件时开始。 保存和取消操作按钮已打开。
保存或取消按钮单击不会结束内联编辑。单击这些按钮后,行仍处于编辑模式。 看起来按钮单击会导致 onSelectRow 事件重新开始内联编辑。
如何在单击保存或取消操作按钮时结束单击内联编辑?
$(function () {
var grid = $("#grid");
grid.jqGrid({
colModel: [{"name":"_actions","width":45,"formatter":"actions",
"formatoptions":{"keys":true,"delbutton":false,"afterSave":function (rowID, response) {
cancelEditing($('#grid'));
aftersavefunc(rowID, response);
}
,"onError":errorfunc
,"onEdit":function (rowID) {
if (typeof (lastSelectedRow) !== 'undefined' && rowID !== lastSelectedRow)
cancelEditing($('#grid'));
lastSelectedRow = rowID;
}
}},
...
},
onSelectRow: function (rowID) {
lastSelectedRow = rowID;
$("tr#" + lastSelectedRow + " div.ui-inline-edit, " + "tr#" + lastSelectedRow + " div.ui-inline-del").hide();
$("tr#" + lastSelectedRow + " div.ui-inline-save, " + "tr#" + lastSelectedRow + " div.ui-inline-cancel").show();
$("#grid").jqGrid('editRow', lastSelectedRow );
}
}
function cancelEditing(myGrid) {
if (typeof lastSelectedRow !== "undefined") {
myGrid.jqGrid('restoreRow', lastSelectedRow);
var lrid = lastSelectedRow;
$("tr#" + lrid + " div.ui-inline-edit").show();
$("tr#" + lrid + " div.ui-inline-save, " + "tr#" + lrid + " div.ui-inline-cancel").hide();
}
}
}
更新
网格包含工具栏中的复选框,用于切换快速数据输入(自动编辑)的单击编辑模式:
onSelectRow: function (rowID) {
if (!autoedit) {
if (typeof (lastSelectedRow) !== "undefined" && lastSelectedRow !== rowID)
cancelEditing ($(this));
return;
}
beginInlineRowEdit(rowID);
},
即使在这种模式下,也可以选择文本并将其复制到剪贴板。问题是在单击模式下单击保存和取消按钮不会终止内联编辑,也许这个单击被解释为开始编辑命令。如果在操作列中单击并且在这种情况下不开始内联编辑,如何检查 onSelectRow,使操作列不开始内联编辑或其他想法?
更新2
我试过了
beforeSelectRow: function (rowID,e) {
alert( $(e.target).html());
}
如果单击编辑按钮消息框为空。如果在复选框复选标记列之外单击,它也是空的。如果单击外部编辑按钮,它将包含整个网格 html。 如何在操作列中检测点击?
更新 3
按照奥列格的建议,我尝试过
beforeSelectRow: function (rowID,e) {
if (!jqgrid_beforeSelectRow( rowID, e)) return false;
beginInlineEdit(rowID, aftersavefunc );
return true;
}
function beginInlineEdit(rowID, afterSave) {
var grid2 = $("#grid");
if (rowID && rowID !== lastSelectedRow) {
var scrollPosition = $("#grid").closest(".ui-jqgrid-bdiv").scrollLeft();
cancelEditing($("#grid"));
lastSelectedRow = rowID;
setTimeout(function () {
grid2.closest(".ui-jqgrid-bdiv").scrollLeft(scrollPosition);
}, 100);
}
$("tr#" + lastSelectedRow + " div.ui-inline-edit, " + "tr#" + lastSelectedRow + " div.ui-inline-del").hide();
$("tr#" + lastSelectedRow + " div.ui-inline-save, " + "tr#" + lastSelectedRow + " div.ui-inline-cancel").show();
$("#grid").jqGrid('editRow', lastSelectedRow, true, null, null, null,
{ _dokdata: FormData },
afterSave,
errorfunc,
function () { // afterrestorefunc
cancelEditing($("#grid"));
setFocusToGrid();
}
);
}
jqgrid_beforeSelectRow = function (rowID, e) {
if ($(e.target).hasClass('ui-icon-cancel')) { return false; }
if ($(e.target).hasClass('ui-icon-disk')) { return false; }
if (typeof (lastSelectedRow) !== "undefined" && lastSelectedRow !== rowID)
cancelEditing($("#grid"));
return true;
}
function cancelEditing(myGrid) {
if (typeof lastSelectedRow !== "undefined") {
myGrid.jqGrid('restoreRow', lastSelectedRow);
restoreActionsIcons();
}
}
使用常规双击开始编辑。在产品网格第一行编辑按钮仅第一次启动 edi。按下保存按钮后,编辑按钮中的剩余点击将被忽略,内联编辑不会开始。仅当产品表中的第一行时才会发生这种情况。在底部行编辑可以开始多次。如何解决这个问题?
【问题讨论】:
标签: jqgrid