2010-08-17 50 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