2011-11-19 19 views
0

我对jqGrid的导航仪添加自定义编辑按钮控制如下:如何设置双击功能调用自定义函数中的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); 
     } 

然而,当我跟我的默认功能editSelectedRow这样替换默认editGridRow功能,

ondblClickRow: function() 
     { 
     var rowid = jQuery("#grid").jqGrid('getGridParam','selrow'); 
     jQuery(this).jqGrid('editSelectedRow', rowid); 
     } 

我得到萤火内的下列错误:

uncaught exception: jqGrid - No such method: editSelectedRow 

函数editSelected然而,行确实存在,并且与点击自定义编辑按钮一起工作。请帮忙,谢谢。

UPDATE: @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:谢谢,你建议不要在地方法editGridRow的使用自定义的方法editSelectedRow。我使用这个的原因是我的表单是Zend Forms,我需要所有Zend Form的花里胡哨的功能。服务器生成此表单并将其加载到对话框中。如果还有一种方法可以在不使用我的editSelectedRow自定义方法的情况下实现这一点,我很乐意学习它。谢谢。

+0

你能否包含定义(实现)'editSelectedRow'方法的代码?我想你*不会用另一个实现'editSelectedRow'替换editGridRow。 – Oleg

+0

@ Oleg:我已经更新了所要求的代码的问题。谢谢 –

+0

我看到你永远不会使用[voting](http://stackoverflow.com/privileges/vote-up)。我想你不知道如何使用它以及它有哪些价值。您有权每天投票回答约30个问题或问题。投票中最重要的不是你给(免费)声望点给其他人。最重要的是,其他用户会发现更多的投票问题和答案*。因此,对有用答案进行投票将有助于其他人查找信息。您不仅可以在您的问题上投票回答。所以如果你想帮助其他用户,你应该使用你的投票权。 – Oleg

回答

2

你的问题是纯粹的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对象。

editSelectedRownavButtonAdd里面的用法可以保持不变。

+0

谢谢。我猜想这是我正在处理的一个基本的js问题,但我的js知识目前有限。感谢您的解决方案,它工作 –

+0

@pi:欢迎您! – Oleg

相关问题