如果在jqgrid中按了操作按钮,如果单击开始编辑,如何在视图模式下显示行

如果在jqgrid中按了操作按钮,如果单击开始编辑,如何在视图模式下显示行,jqgrid,Jqgrid,jqGrid内联编辑从下面的single-in click by-OnSetrow事件开始。 保存和取消操作按钮已打开 保存或取消按钮单击不会结束内联编辑。单击这些按钮后,行仍处于编辑模式。 它看起来像是按钮点击导致OnSetrow事件,该事件重新启动内联编辑 如何在单击的“保存”或“取消”操作按钮中结束单键内联编辑 $(function () { var grid = $("#grid"); grid.jqGrid({ colModel: [{"name":

jqGrid内联编辑从下面的single-in click by-OnSetrow事件开始。 保存和取消操作按钮已打开

保存或取消按钮单击不会结束内联编辑。单击这些按钮后,行仍处于编辑模式。 它看起来像是按钮点击导致OnSetrow事件,该事件重新启动内联编辑

如何在单击的“保存”或“取消”操作按钮中结束单键内联编辑

$(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();
    }
}