Javascript 如何设置双击函数来调用jqGrid中的自定义函数

Javascript 如何设置双击函数来调用jqGrid中的自定义函数,javascript,jqgrid,double-click,Javascript,Jqgrid,Double Click,我在jqGrid navigator上添加了一个自定义编辑按钮控件,如下所示: jQuery("#grid").navButtonAdd('#pager', { caption:"Edit", buttonicon:"ui-icon-pencil", onClickButton: editSelectedRow, position: "last", title:"click to edit selected row",

我在jqGrid navigator上添加了一个自定义编辑按钮控件,如下所示:

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。但是,我还想将双击函数添加到,以便在双击时调用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);
      }
我在firebug中发现以下错误:

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表单的所有铃铛和口哨都可用。服务器生成此表单并将其加载到对话框表单中。如果有一种方法可以在不使用editSelectedRow自定义方法的情况下实现这一点,我很乐意学习它。谢谢

你的问题是纯JavaScript问题

如果将函数
editSelectedRow
定义为

function editSelectedRow(rowid)
{
    ...
}
您可以将其称为
editSelectedRow(rowid)
,而不是
jQuery(this).jqGrid('editSelectedRow',rowid)

另一个问题是在
editSelectedRow
函数体内部使用
this
。这是不对的。您可以用另一种方式定义
editSelectedRow
函数

var editSelectedRow = function (rowid) {
    ...
};
在这种情况下,
editSelectedRow
将能够将
绑定到任何值。为此,您需要使用另一种形式的函数调用。
ondblClickRow的内部将显示

ondblClickRow: function () {
    var rowid = jQuery("#grid").jqGrid('getGridParam','selrow');
    editSelectedRow.call(this, rowid);
}
在上述示例中,
call
的第一个参数是函数内部用作
this
的值。我们只将当前
值转发到
editSelectedRow
。如果我们使用
editSelectedRow(rowid)格式
对于函数调用,
函数内部的值将初始化为
窗口
对象


editSelectedRow
navbuttonad
中的用法可以保持不变。

您的问题是纯JavaScript问题

如果将函数
editSelectedRow
定义为

function editSelectedRow(rowid)
{
    ...
}
您可以将其称为
editSelectedRow(rowid)
,而不是
jQuery(this).jqGrid('editSelectedRow',rowid)

另一个问题是在
editSelectedRow
函数体内部使用
this
。这是不对的。您可以用另一种方式定义
editSelectedRow
函数

var editSelectedRow = function (rowid) {
    ...
};
在这种情况下,
editSelectedRow
将能够将
绑定到任何值。为此,您需要使用另一种形式的函数调用。
ondblClickRow的内部将显示

ondblClickRow: function () {
    var rowid = jQuery("#grid").jqGrid('getGridParam','selrow');
    editSelectedRow.call(this, rowid);
}
在上述示例中,
call
的第一个参数是函数内部用作
this
的值。我们只将当前
值转发到
editSelectedRow
。如果我们使用
editSelectedRow(rowid)格式
对于函数调用,
函数内部的值将初始化为
窗口
对象


editSelectedRow
navbuttonad
中的用法可以保持不变。

您能否包含定义(实现)editSelectedRow
方法的代码?我想您没有用另一个实现来替换
editGridRow
editSelectedRow
@Oleg:我已经用请求的代码更新了问题。谢谢,我发现您从未使用过。我想你不知道如何使用它,也不知道它有什么价值。你每天有权投票选出大约30个答案或问题。投票中最重要的不是你给其他人(免费的)声望点数。最重要的是,更多的投票问题和答案将被其他用户找到。因此,投票选出有用的答案将有助于其他人找到信息。你不仅可以投票回答你的问题。因此,如果你想帮助其他用户,你应该使用你的投票权。你能包括定义(实现)editSelectedRow方法的代码吗?我想您没有用另一个实现来替换
editGridRow
editSelectedRow
@Oleg:我已经用请求的代码更新了问题。谢谢,我发现您从未使用过。我想你不知道如何使用它,也不知道它有什么价值。你每天有权投票选出大约30个答案或问题。投票中最重要的不是你给其他人(免费的)声望点数。最重要的是,更多的投票问题和答案将被其他用户找到。因此,投票选出有用的答案将有助于其他人找到信息。你不仅可以投票回答你的问题。所以,如果你想帮助其他用户,你应该使用你的投票权。谢谢。我猜这是我正在处理的一个基本js问题,但我的js知识目前有限。谢谢你的解决方案,它很有效。我猜这是我正在处理的一个基本js问题,但我的js知识目前有限。谢谢你的解决方案,它成功了