2011-03-04 70 views

回答

11

formatter:'actions'尚未记录在案。当前版本的jqGrid 3.8.2支持你需要的一些选项。在当前版本的jquery.fmatter.js的lines 394-466中,您可以看到更多。

你需要的是onEdit,afterSave(在“Submit”)和delOptions.onclickSubmit参数。

说实话我之前没有使用'actions'格式化程序,并且自己理解它,编写the demo,它也解决了所有问题。为了使其他更容易找到的例子中包括的代码在这里最重要的部分:

var grid = $("#list"); 
grid.jqGrid({ 
    datatype: "local", 
    data: mydata,   // init local data which will be edited 
    editurl: 'clientArray', // we will use local editing 
    colNames:['Actions', ... ], 
    colModel:[ 
     {name:'act',index:'act',width:55,align:'center',sortable:false,formatter:'actions', 
     formatoptions:{ 
      keys: true, // we want use [Enter] key to save the row and [Esc] to cancel editing. 
      onEdit:function(rowid) { 
       alert("in onEdit: rowid="+rowid+"\nWe don't need return anything"); 
      }, 
      onSuccess:function(jqXHR) { 
       // the function will be used as "succesfunc" parameter of editRow function 
       // (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#editrow) 
       alert("in onSuccess used only for remote editing:"+ 
         "\nresponseText="+jqXHR.responseText+ 
         "\n\nWe can verify the server response and return false in case of"+ 
         " error response. return true confirm that the response is successful"); 
       // we can verify the server response and interpret it do as an error 
       // in the case we should return false. In the case onError will be called 
       return true; 
      }, 
      onError:function(rowid, jqXHR, textStatus) { 
       // the function will be used as "errorfunc" parameter of editRow function 
       // (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#editrow) 
       // and saveRow function 
       // (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#saverow) 
       alert("in onError used only for remote editing:"+ 
         "\nresponseText="+jqXHR.responseText+ 
         "\nstatus="+jqXHR.status+ 
         "\nstatusText"+jqXHR.statusText+ 
         "\n\nWe don't need return anything"); 
      }, 
      afterSave:function(rowid) { 
       alert("in afterSave (Submit): rowid="+rowid+"\nWe don't need return anything"); 
      }, 
      afterRestore:function(rowid) { 
       alert("in afterRestore (Cancel): rowid="+rowid+"\nWe don't need return anything"); 
      }, 
      delOptions: { 
       // because I use "local" data I don't want to send the changes to the server 
       // so I use "processing:true" setting and delete the row manually in onclickSubmit 
       onclickSubmit: function(rp_ge, rowid) { 
        // we can use onclickSubmit function as "onclick" on "Delete" button 
        alert("The row with rowid="+rowid+" will be deleted"); 

        // reset processing which could be modified 
        rp_ge.processing = true; 

        // delete row 
        grid.delRowData(rowid); 
        $("#delmod"+grid[0].id).hide(); 

        if (grid[0].p.lastpage > 1) { 
         // reload grid to make the row from the next page visable. 
         // TODO: deleting the last row from the last page which number is higher as 1 
         grid.trigger("reloadGrid", [{page:grid[0].p.page}]); 
        } 

        return true; 
       }, 
       processing:true // !!! the most important step for the "local" editing 
           //  skip ajax request to the server 
      } 
     }}, 
     ... 
    ], 
    ... 
}); 
+0

当我用你的建议我的代码从Jqgrid.min.js得到一个错误: - “无法获取属性未定义或空引用的'整数'“。你能告诉我如果我错过了什么。我应该在数据中添加额外的列吗? – 2015-11-17 10:59:14

+1

@Ganesh:你是否在我为答案创建的[旧演示](http://www.ok-soft-gmbh.com/jqGrid/ActionButtons.htm)中有错误?如果你在你的代码中出错*,那么你应该创建演示(例如在jsfiddle中),它可以用来重现你的问题。只有在这之后你才能帮到你。例如,如果您使用旧版本的jqGrid,并且未在'jquery.jqgrid.min.js'之前包含所需的区域设置文件'grid.locale-en.js',则无法获取属性'integer''。 – Oleg 2015-11-17 11:27:20