我在我的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;
}
誰能幫助我?
jqGrid沒有在數據庫中保存多行的功能。所以你應該用JavaScript代碼附加你的問題的文本,它顯示了你的確做了什麼。 – Oleg
它被添加上面 – Mark
該代碼不包含jqGrid的定義。目前還不清楚你使用的是哪一種'datatype',以及你是否使用'loadonce:true'。您還不清楚使用哪種編輯模式。此外,您可以使用未在發佈代碼中定義的'composeEditedRecord'函數和'updatedList'變量。你能否擴展發佈的代碼? – Oleg