2013-10-23 93 views
0

我在我的web應用程序中使用jqgrid。使用iOS 7時,當我選擇jqgrid表中的所有行並嘗試將我的編輯保存到數據庫中時,它不會保存。 如果我只編輯一行然後保存並編輯另一行 - 基本上,如果我一次編輯一行 - 那麼它就可以工作。只是多行編輯不起作用。它僅在iOS 7好好嘗試一下工作jqGrid多行編輯不保存到iOS7中的數據庫

我已經看到了這個帖子:http://www.trirand.net/forum/default.aspx?g=posts&m=13688 ,我已經更新了我的jqGrid到最新版本(4.5.4)和我仍然有在iOS 7同樣的問題。

這裏是提交記錄的JavaScript:

function submitChange(tabId) { 
if (!submitFlag) return; 
var records=[]; 
var $t = $("#" + tabId); 
var selectedIds = $t.jqGrid('getGridParam','selarrrow'); 
var postData = $t.jqGrid("getGridParam", "postData"); 
if (selectedIds.length > 0) { 
    for (var i=0; i < selectedIds.length; i++){ 
    updatedList[selectedIds[i]] = composeEditedRecord(selectedIds[i]); //Put edited record into updatedList 
    } 
} else { 
    alert($T('missing.msg')); 
    return; 
} 
var z = 0; 
for (var key in updatedList) { 
    if (typeof(updatedList[key].endDate) != 'undefined' 
    && typeof(updatedList[key].endTypeId) != 'undefined') { 
    records[z] = updatedList[key]; 
    z++; 
    } else { 
    alert($T('missing.msg')); 
    return; 
    } 
} 

if (records.length < $t.jqGrid('getGridParam', 'records')) { 
    alert($T('missing.msg')); 
    return; 
} 
$.extend(postData, {'updatedList': JSON.stringify(records)}); 

$.post('mse/end', postData, function(data) { 

    history.go(-1); 
}); 
} 

而且jQuery的版本是1.5.1。

<link type="text/css" rel="stylesheet" href="css/jquery-ui-1.8.10.custom.css" /> 
<link type="text/css" rel="stylesheet" href="css/ui.jqgrid.css" media="screen" /> 
<link type="text/css" rel="stylesheet" href="css/ui.jqgrid.custom.css" media="screen" /> 


<script src="jquery/jquery.js" type="text/javascript" ></script> 
<script src="jquery/ui/jquery-ui.js" type="text/javascript" ></script> 
<script src="jquery/plugins/validate/jquery.validate.js" type="text/javascript" ></script> 
<script src="jquery/plugins/jqgrid/i18n/grid.locale-en.js" type="text/javascript"></script> 
<script src="jquery/plugins/jqgrid/jquery.jqGrid.min.js" type="text/javascript"></script> 

這裏是composeEditedRecord功能:

function composeEditedRecord(id) { 
var tmp = getEditableCells('mseTableEnd', id); 
var editedRecord = updatedList[id]; 
if (!editedRecord) { 
    editedRecord = {}; 
    editedRecord['id'] = id; 
} 
for (var key in tmp) { 
    if (key == 'tag') 
    editedRecord['TagPattern'] = tmp[key]; 
    else 
    editedRecord[key] = tmp[key]; 
} 

return editedRecord; 
} 

這裏是jqGrid的定義:

$("#mseTableEnd").jqGrid({ 
     url: 'mse/list.json', 
     sortname: 'guisid', 
     colNames: mse.columnDisplayNames, 
     colModel: mse.colModelDef, 
     postData: filterValues, 
     onSelectRow: function(id,status){ 
     if(status == true) { 
    $('#mseTableEnd').jqGrid('editRow',id,true); 
    $('#jqg_mseTableEnd_' + id).focus(); 
    } else if(status == false) { 
    var tmp = getEditableCells('mseTableEnd', id); 
     var record = composeEditedRecord(id); 
     updatedList[id] = record; //Put edited record into updatedList when unchecked 
     $('#mseTableEnd').jqGrid('restoreRow',id); 
     $('#mseTableEnd').jqGrid('setRowData',id, tmp); 
    } 

    }, 
    onSelectAll: function(aRowids, status) { 
    if (status){ 
     for (var i = 0; i < aRowids.length; i++) 
     $('#mseTableEnd').jqGrid('editRow',aRowids[i],true); 
     $('#jqg_mseTableEnd_' + aRowids[i-1]).focus(); 
     } else { 
     for (var i = 0; i < aRowids.length; i++) { 
     var tmp = getEditableCells('mseTableEnd', aRowids[i]); 
     var record = composeEditedRecord(aRowids[i]); 
       updatedList[aRowids[i]] = record; //Put edited record into updatedList when unchecked 
     $('#mseTableEnd').jqGrid('restoreRow',aRowids[i]); 
     $('#mseTableEnd').jqGrid('setRowData',aRowids[i], tmp); 
     } 
     } 
    }, 
    gridComplete: function() { 

    $("#mseTableEnd").setColProp('tag',{editable:false}); 
    var columnsToHide = []; 
    for (var i = 0; i <mse.colModelDef.length; i++) { 
    if (i > 12) columnsToHide.push(mse.colModelDef[i].name); 
    } 
    columnsToHide.push('generation'); 
    $("#mseTableEnd").jqGrid('hideCol', columnsToHide); 
    $("#mseTableEnd").jqGrid('showCol', ['enddate' 'comment']); 
    }, 
      loadComplete: function() { 
     var ids = $('#mseTableEnd').jqGrid('getDataIDs'); 
     for (var i = 0; i < ids.length; i++) { 
     $('#mseTableEnd').setSelection(ids[i]); // All selected by default 
      $('#'+ids[i]+' a').click(function(e) { 
       var myHash = e.currentTarget.hash;  // string like "#?id=0" 
       if (myHash.substring(0,5) === '#?id=') { 
        var id = myHash.substring(5,myHash.length); // getting row Id 
        var url = appContext.contextPath + '/mse/edit.do?mseId=' + id; 
      hasPermissionByIds('Mse', id, 1, gotoPage, url); 
       } 
       e.preventDefault(); 
      }); 
     } 
     } 
    }); 

這裏是getEditableCells功能:

function getEditableCells(tabId, rowId) { 
var $t = $("#" + tabId); 
var ind = $t.jqGrid("getInd",rowId,true); 
var cm, nm, tmp={}; 

$("td",ind).each(function(i) { 
    cm = $t.jqGrid('getGridParam', 'colModel')[i]; 
    nm = cm.name; 
    if (nm != 'cb' && nm != 'subgrid' && cm.editable===true && nm != 'rn') { 
    if (cm.edittype == "text") { 
    if ($("input, textarea",this).length > 0) 
    tmp[nm]=$("input, textarea",this).val(); 
    else { 
    var rowData = $t.jqGrid('getRowData', rowId); 
    tmp[nm]=rowData[nm]; 
    } 
    } 
    } 
}); 
return tmp; 
} 

誰能幫助我?

+0

jqGrid沒有在數據庫中保存多行的功能。所以你應該用JavaScript代碼附加你的問題的文本,它顯示了你的確做了什麼。 – Oleg

+0

它被添加上面 – Mark

+0

該代碼不包含jqGrid的定義。目前還不清楚你使用的是哪一種'datatype',以及你是否使用'loadonce:true'。您還不清楚使用哪種編輯模式。此外,您可以使用未在發佈代碼中定義的'composeEditedRecord'函數和'updatedList'變量。你能否擴展發佈的代碼? – Oleg

回答

0

謝謝你的幫助。 我把帖子中的getEditableCells函數。

,我們已經找到了問題要與這些線路在getEditableCells功能:

if ($("input, textarea",this).length > 0) 
tmp[nm]=$("input, textarea",this).val(); 

如果我們將文本更改爲這:

if ($("input",this).val().length > 0) 
tmp[nm]=$("input",this).val(); 

然後修復該問題,但導致的html當我取消選擇並重新選擇複選框時,將其插入網格表格的文本字段中。也許我的jQuery語法有問題嗎?

相關問題