我在jqGrid导航器上添加了一个自定义编辑按钮控件,如下所示:
jQuery("#grid").navButtonAdd('#pager',
{
caption:"Edit",
buttonicon:"ui-icon-pencil",
onClickButton: editSelectedRow,
position: "last",
title:"click to edit selected row",
cursor: "pointer",
id: "edit-row"
}
);
因此,它不是使用默认函数:editGridRow,而是使用了我的自定义函数editSelectedRow。但是,我也想添加doubleClick函数,以便它在doubleClick上调用editSelectedRow。
使用默认的editGridRow函数可以这样工作
ondblClickRow: function()
{
var rowid = jQuery("#grid").jqGrid('getGridParam','selrow');
jQuery(this).jqGrid('editGridRow', rowid);
}
但是,当我将默认editGridRow函数替换为默认函数editSelectedRow时,
ondblClickRow: function()
{
var rowid = jQuery("#grid").jqGrid('getGridParam','selrow');
jQuery(this).jqGrid('editSelectedRow', rowid);
}
我在萤火虫中收到以下错误:
uncaught exception: jqGrid - No such method: editSelectedRow
但是,函数editSelectedRow确实存在,并且可以通过单击自定义编辑按钮来工作。请帮忙,谢谢。
更新:
@Oleg:根据要求,这里是代码定义方法:editSelectedRow
function editSelectedRow(rowid)
{
var rowid = jQuery("#grid").jqGrid('getGridParam','selrow');
if( rowid != null )
{
var dialogId = '#edit-form-dialog';
var dialogTitle = 'Edit Customer';
$(dialogId).load('/customer/edit/id/' + rowid, function ()
{
$(this).dialog(
{
modal: false,
resizable: true,
minWidth: 650,
minHeight: 300,
height: $(window).height() * 0.95,
title: dialogTitle,
buttons:
{
"Save": function ()
{
var form = $('form', this);
$(form).submit();
$("#grid").trigger("reloadGrid");
},
"Cancel": function ()
{
$("#grid").trigger("reloadGrid");
$(this).dialog('close');
}
}
});
LaunchEditForm(this);
});
}
else
{
jQuery( "#dialogSelectRow" ).dialog();
}
return false;
}
@Oleg:谢谢,建议不要使用自定义方法editSelectedRow代替方法editGridRow。我使用此表单的原因是我的表单是Zend Forms,并且我需要Zend Form的所有细节。服务器生成此表单,并将其加载到对话框表单中。如果仍然有一种方法可以不依靠我的editSelectedRow自定义方法来实现,那么我将很高兴学习它。谢谢。
最佳答案
您的问题是纯JavaScript问题。
如果将函数editSelectedRow
定义为
function editSelectedRow(rowid)
{
...
}
您可以将其称为
editSelectedRow(rowid)
而不是jQuery(this).jqGrid('editSelectedRow', rowid);
。另一个问题是您在
this
函数的主体内部使用了editSelectedRow
。不对您可以用另一种方式定义editSelectedRow
函数var editSelectedRow = function (rowid) {
...
};
如果
editSelectedRow
能够将this
绑定到任何值。为此,您需要使用另一种形式的函数调用。在ondblClickRow
里面ondblClickRow: function () {
var rowid = jQuery("#grid").jqGrid('getGridParam','selrow');
editSelectedRow.call(this, rowid);
}
在上面的示例中,
call
的第一个参数是函数内部用作this
的值。我们仅将当前的this
值转发给editSelectedRow
。如果我们使用形式editSelectedRow(rowid);
来调用函数,则函数内部的this
值将被初始化为window
对象。editSelectedRow
内部的navButtonAdd
用法可以保持不变。