2011-09-30 194 views
0

我試圖獲得一個jQuery的jqgrid啓動和運行的實現。一切都很順利,除了saveCell函數我試着打電話。我希望我的插件可以隨時編輯任何* _fee字段,我希望小計和總字段也能自動更新。我已經使用getCell和setCell進行了視覺更新工作,但saveCell無法正常工作。 saveCell()實際上並沒有將字段數據傳遞給我的PHP腳本。已編輯的費用字段的初始保存工作正常,但小計字段和總字段自動切換後的ajax請求尚未完成。我得到id和oper字段,但不是我實際改變的字段!jqgrid saveCell問題

這裏是我的代碼:

  $("#cust_grid").jqGrid({ 
       url:'/ajax/grid', 
       datatype: 'xml', 
       mtype: 'POST',    
       colNames:['ID','Company', 'Sales','Credits','Voids','Declines','Total Trans','Monthly Fee','Trans Fee','Misc Fee','Subtotal','Total'], 
       colModel :[ 
        {name:'id', index:'id', width:55, search: true}, 
        {name:'company', index:'company', width:100, search: true}, 
        {name:'sales', index:'sales', width:70, search: true}, 
        {name:'credits', index:'credits', width:70, search: true}, 
        {name:'voids', index:'voids', width:70, search: true}, 
        {name:'declines', index:'declines', width:70, search: true}, 
        {name:'total_trans', index:'total_trans', width:70, align:'right', search: true}, 
        {name:'monthly_fee', index:'monthly_fee', width:90, align:'right', editable: true, search: true, formatter: 'number'}, 
        {name:'trans_fee', index:'trans_fee', width:70, align:'right', editable: true, search: true, formatter: 'number'}, 
        {name:'misc_fee', index:'misc_fee', width:70, align:'right', editable: true, search: true, formatter: 'number'}, 
        {name:'subtotal', index:'subtotal', width:90, align:'right', search: true}, 
        {name:'total', index:'total', width:90, align:'right', search: true} 
       ], 
       pager: '#pager', 
       rowNum:25, 
       rowList:[10,25,50,100], 
       sortname: 'id', 
       sortorder: 'asc', 
       viewrecords: true, 
       gridview: true, 
       caption: 'Our Customers', 
       height: 600, 
       altRows: true, 
       cellEdit: true,  
       cellsubmit: "remote", 
       cellurl: "/ajax/editCell", 
       afterSaveCell: function (rowid, cellname, value, iRow, iCol) {    
        var transFee = $('#cust_grid').jqGrid('getCell', rowid, 'trans_fee'); 
        var totalTrans = $('#cust_grid').jqGrid('getCell', rowid, 'total_trans'); 
        var subtotal = transFee * totalTrans; 
        subtotal = subtotal.toFixed(2); 
        //alert(subtotal); 
        var monthlyFee = $('#cust_grid').jqGrid('getCell', rowid, 'monthly_fee'); 
        //alert(monthlyFee); 
        var total = Number(subtotal) + Number(monthlyFee); 
        //alert(total);      
        total = total.toFixed(2); 

        $('#cust_grid').jqGrid('setCell', rowid, 'subtotal', subtotal); 
        alert("iRow=" + iRow + " iCol=" + iCol); 
        $('#cust_grid').jqGrid('saveCell', iRow, 10); 
        alert("cell saved!"); 
        $('#cust_grid').jqGrid('setCell', rowid, 'total', total); 
        $('#cust_grid').jqGrid('saveCell', iRow, 11); 
       } 
      }); 

      $("#cust_grid").jqGrid('navGrid','#pager', 
       {edit:false,add:false,del:false,search:true},{},{},{}, 
       { 
        closeAfterSearch:true, 
        closeOnEscape:true, 

       }, 
       {} 
      ); 
     }); 

第一個Ajax請求包括:

Array 
(
    [trans_fee] => 15.13 
    [id] => 1 
    [oper] => edit 
) 

但後續Ajax請求只包含:

Array 
(
    [id] => 1 
    [oper] => edit 
) 

由於後續Ajax請求不要不包含實際更改的字段數據,我無法保存!有沒有人有這個提示?謝謝!

回答

1

我認爲有什麼saveCell方法會有誤解。它只能與editCell一起使用,不能僅用於向服務器發送某個單元。在調用[editCell]之後,單元格的當前內容將保存在內部savedRow參數中。輸入字段將被創建,用戶可以更改單元格內容。如果稍後調用saveCell方法,則將savedRow參數的內容與當前單元格內容進行比較。如果有差異,則更改將發送到服務器。

因此,您嘗試以錯誤的方式使用saveCell方法。對於setCell方法,您不能發送您之前更改過的新單元格值。

+0

奧列格,那麼你會怎麼做呢?我希望小計和總字段在更新任何* _fee字段時自動更新和保存。有沒有不同的方法,我應該使用,而不是saveCell?或者我應該有一個完全不同的策略? – Erreth

+0

@Erreth:您應該只使用[jQuery.ajax](http://api.jquery.com/jQuery.ajax/)或一些簡化形式,如[jQuery.post](http://api.jquery.com/ jQuery.post /)發送任何數據到服務器。所以我建議你將'setCell'後的'saveCell'調用替換爲'$ .ajax'或'$ .post'。 – Oleg