2010-08-17 47 views
0

我有一個jqGrid以及一個jQuery UI按鈕工具欄。我的工具欄包含查看&編輯模式。在我的jqGrid onSelectRow中,我用方法isInEditMode檢查編輯模式。如果帶有ui-active-state的按鈕是編輯按鈕,則返回true。jqGrid選擇行只有一次,隨後不能選擇任何其他行,網格卡住

我的網格似乎加載正確,懸停類打開/關閉拖動我的鼠標在行上。如果我不處於編輯模式並單擊一行,它會執行其他功能,這是正確的。但是,當isInEditMode返回true時,它似乎只允許onSelectRow觸發一次。

非常感謝所有的幫助。

var lastselTsg; 

grid.jqGrid({ 
     colNames: ['BudgetId', 'BudgetAccountId', 'Account #', 'Name', 'Cost', 'StaticRowId', 'SortOrder'], 
     colModel: [ 
      { name: 'BudgetId', index: 'BudgetId', hidden: true, edithidden: true }, 
      { name: 'BudgetAccountId', index: 'BudgetAccountId', hidden: true, edithidden: true }, 
      { name: 'AccountNumber', index: 'AccountNumber', sortable: false, width: 70 }, 
      { name: 'BudgetName', index: 'BudgetName', sortable: false, width: 230, editable: true, edittype: 'text', editoptions: { 
       defaultValue: "", 
       dataInitInit: function (el) { 
        var value = $(el).val(); 

        value = value.replace("<strong>", ""); 
        value = value.replace("</strong>", ""); 

        $(el).val(value); 
        $(el).focus(); 

        if (value == "") { 
         $(el).remove(); 

         return false; 
        } 

       } 
      } 
      }, 
      { name: 'TotalCost', index: 'TotalCost', sortable: false, formatter: totalCurrencyFormatter, width: 100 }, 
      { name: 'StaticRowId', index: 'StaticRowId', sortable: false, hidden: true, edithidden: true }, 
      { name: 'SortOrder', index: 'SortOrder', sortable: false, hidden: true, edithidden: true } 
     ], 
     pager: pager, 
     pgbuttons: false, 
     pginput: false, 
     rowlist: [], 
     sortname: 'SortOrder', 
     rowNum: 99999999, 
     sortorder: "asc", 
     datatype: "json", 
     viewrecords: true, 
     url: url + "GetLoad", 
     editurl: url + "SaveGrid/", 
     loadComplete: function (data) { 

     }, 
     onSelectRow: function (rowId) { 
      if (isInEditMode(budgetId)) { 
       if (rowId && rowId !== lastselTsg) { 

        grid.jqGrid('restoreRow', lastselTsg); 

        var rowData = grid.jqGrid("getRowData", rowId); 
        if (rowData != undefined && rowData != null) { 
         console.debug("entering edit mode");  

         grid.jqGrid('editRow', rowId, true, '', '', url + 'SaveTopSheet', { 
          budgetAccountId: rowData.BudgetAccountId 
         }, 
         function(rowid, response) { 
          console.debug("aftersave: reloadGrid"); 
          grid.trigger("reloadGrid"); 
         }, '', function(rowid, reuslt) { 
          console.debug("after restore: reloadGrid"); 
          grid.trigger("reloadGrid"); 
         }); 

        } 

        lastselTsg = rowId; 
       } 
      } else { 
       var getRowData = $("#baseTopSheetGrid" + budgetId).jqGrid('getRowData'); 
       var rowData = getRowData[rowId - 1]; 

       onSelectGridRow(rowData); 
      } 
     }, 
     gridComplete: function() { 

      var ids = grid.jqGrid('getDataIDs'); 
      var getRowData = grid.jqGrid('getRowData'); 

      if ($.isFunction(budgetGridLoadComplete)) 
       budgetGridLoadComplete(getRowData); 

     } 
    }).navGrid(pager, { edit: false, add: false, del: false, search: true }); 

回答

0

onSelectRow事件句柄內的else部分看起來有點怪。你最好不要叫onSelectRow裏面的onSelectRowgetRowData裏面的else裏面的代碼片段看起來也是我的錯(rowId應該是函數的參數)。

+0

onSelectrow(rowData)是傳遞給生成網格的方法的函數。我已更改爲函數的名稱以避免將來發生任何衝突,但我仍然收到此問題。 – Josh 2010-08-19 16:12:54

+0

當前您發佈的代碼中有許多對外部函數('isInEditMode','onSelectGridRow','budgetGridLoadComplete')的引用。所以你的問題不能被複制。你描述的問題不存在於一個簡單的jqGrid中。如果你希望有人解決你的問題,你應該發佈一個代碼,讓其他人可以重現你的問題。 – Oleg 2010-08-19 16:40:35