2011-11-19 44 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

相關問題