jqGrid多行编辑不会保存到iOS7中的数据库

时间:2013-10-23 14:39:42

标签: jquery jqgrid rows multi-select

我在我的网络应用程序中使用jqgrid。使用iOS 7,当我选择jqgrid表中的所有行并尝试将我的编辑内容保存到数据库中时,它不会保存。 如果我只编辑一行,然后保存然后编辑另一行 - 基本上如果我一次编辑一行 - 那么它的工作原理。只是多行编辑不起作用。它只适用于iOS 7。

我已经看过这篇文章: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;
}

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分: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语法出了问题?