如果在jqgrid中按了操作按钮,如果单击开始编辑,如何在视图模式下显示行
jqGrid内联编辑从下面的single-in click by-OnSetrow事件开始。 保存和取消操作按钮已打开 保存或取消按钮单击不会结束内联编辑。单击这些按钮后,行仍处于编辑模式。 它看起来像是按钮点击导致OnSetrow事件,该事件重新启动内联编辑 如何在单击的“保存”或“取消”操作按钮中结束单键内联编辑如果在jqgrid中按了操作按钮,如果单击开始编辑,如何在视图模式下显示行,jqgrid,Jqgrid,jqGrid内联编辑从下面的single-in click by-OnSetrow事件开始。 保存和取消操作按钮已打开 保存或取消按钮单击不会结束内联编辑。单击这些按钮后,行仍处于编辑模式。 它看起来像是按钮点击导致OnSetrow事件,该事件重新启动内联编辑 如何在单击的“保存”或“取消”操作按钮中结束单键内联编辑 $(function () { var grid = $("#grid"); grid.jqGrid({ colModel: [{"name":
$(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();
}
}
}
更新
网格包含工具栏中的复选框,用于切换快速数据输入(自动编辑)的单击编辑模式:
即使在此模式下,也可以选择文本并将其复制到剪贴板。问题是,在单击模式下,单击“保存”和“取消”按钮不会终止内联编辑,可能此单击被解释为“开始编辑”命令。如果在“操作”列中单击,如何签入OnEleow而不启动内联编辑在这种情况下,如何使“操作”列不启动内联编辑或其他想法
更新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。按下“保存”按钮后,编辑按钮中的其余单击将被忽略,内联编辑不会启动。只有当产品表中的第一行出现时,才会发生这种情况。在底部行中,可以多次启动编辑。如何解决此问题?如果我理解您的问题,请更正。选择行后,用户必须按Esc键,如果用户不想编辑行,请单击“取消”操作按钮
我曾经使用网格,它不仅用于编辑,还用于查看。所以我个人更喜欢使用而不是进入内联编辑模式。在这种情况下,用户可以选择或只需单击该行,或将网格中的某些数据复制到剪贴板。如果用户需要编辑行,则用户可以双击操作按钮。谢谢。我更新了问题。我正在试验单点击编辑模式,看看它是否合理。它通过保存大量鼠标点击来提高数据输入速度。@安德鲁斯:我不太理解您描述的效果,但我认为您需要在SelectRow事件处理程序中执行一些检查,该处理程序的第二个参数是
e
e.target
是被单击的单元格(
)或其子元素。如果要阻止行选择,可以返回false
。顺便说一下,在选择行之前,您可以将当前在电子屏幕上的代码移动到。在这种情况下,您将拥有可以使用的附加信息(e.target
)。@Andrus:如果($(e.target).hasClass('ui-icon-cancel')){return false;}
,您可以执行以下if($(e.target).hasClass('ui-icon-cancel')){return false;}
,以防止在“取消”时选择行“单击了操作按钮。@安德鲁斯:在我的测试中,单击“禁用控件”如“禁用”复选框什么都不做。有些浏览器(IE)会向前双击禁用的元素。仅在禁用元素外部单击,而在单元格内部单击,将最终触发单击事件。您最初的问题是单击操作按钮。为什么要检查禁用元素的单击?@Andrus:如果你真的需要这种行为,那么单击禁用复选框应该开始内联编辑。在这种情况下,你不应该使用禁用复选框。相反,您可以保存复选框的图像,并使用自定义格式设置程序显示伪复选框。可能还有其他一些技巧,如何说浏览器调用禁用控件上的单击事件处理程序,但我不知道。
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();
}
}