【发布时间】:2015-03-25 20:37:46
【问题描述】:
所以jqGrid每一行里面的编辑按钮的默认行为是在同一个页面中打开表单,对吧?
我需要它来打开另一个视图,另一个 URL。
我已经使用 .navButtonAdd 方法通过位于网格分页器中的编辑按钮来完成此操作。但我不知道如何为行按钮做同样的事情。
有人可以帮帮我吗?
【问题讨论】:
标签: jqgrid
所以jqGrid每一行里面的编辑按钮的默认行为是在同一个页面中打开表单,对吧?
我需要它来打开另一个视图,另一个 URL。
我已经使用 .navButtonAdd 方法通过位于网格分页器中的编辑按钮来完成此操作。但我不知道如何为行按钮做同样的事情。
有人可以帮帮我吗?
【问题讨论】:
标签: jqgrid
jqGrid 目前不提供任何简单的方法来将编辑调用替换为另一种方法或包含自定义按钮。你也可以选择“子类化”$.fn.fmatter.rowactions 函数,就像我在the answer 中描述的那样。 $.fn.fmatter.rowactions 函数将在单击任何操作按钮时被调用。所以可以测试act参数是否为"edit"。如果没有"edit" 按钮,您可以将呼叫转发到原始$.fn.fmatter.rowactions 功能。如果是"edit" 按钮,您可以改为执行任何自定义操作。
更新:确切的实现在一定程度上取决于您使用的 jqGrid 版本,因为函数 $.fn.fmatter.rowactions 的参数和 this 的值对于不同版本的 jqGrid 是不同的。我为您创建了the demo,它使用了free jqGrid 4.8(参见readme 和wiki)。我使用以下代码进行子类化
var orgRowActions = $.fn.fmatter.rowactions;
$.fn.fmatter.rowactions = function (e, act) {
var $grid = $(this).closest("table.ui-jqgrid-btable"),
rowid = $(this).closest("tr.jqgrow").attr("id");
if (act === "edit") {
$grid.jqGrid("viewGridRow", rowid);
return false;
}
return orgRowActions.call(this, e, act);
}
因此,“编辑”按钮会启动“查看”而不是编辑表单。
我计划在下一版本的免费 jqGrid 中包含更多自定义可能性。因此,无需使用子类化技巧即可创建自定义内联图标。
【讨论】:
var orgRowActions = $.fn.fmatter.rowactions; $.fn.fmatter.rowactions = function (rid, gid, act, pos) { var $grid = $("#" + $.jgrid.jqID(gid)), rowData = $grid.jqGrid("getLocalRow", rid), isNonEditable = false, result; if (act === "edit") { window.location = myURL; } result = orgRowActions.call(this, rid, gid, act, pos); return result; } 关于我哪里出错了有什么想法吗?
$.fn.fmatter.rowactions的接口在4.6.0和free jqGrid 4.8中是一样的,所以你也可以在4.6中使用相同的代码。我仍然建议您尝试免费的 jqGrid,它像 jqGrid 4.6 一样免费,它包含许多新功能和错误修复。是jqGrid的fork,以后会继续开发。