2013-09-20 2 views
0

У меня есть сетка, которая проверяет наличие дубликата в сетке. Который я получил успешно однако после того, как моя программа проверяет дубликат штрих-кода, я восстанавливаю строку и снова пытаюсь редактировать, чтобы пользователь снова вводил правильный штрих-код, но событие ввода ключа не запускается на этот раз при редактировании.jqGrid метод сохранения не запускается после ошибки?

Шаги для воспроизведения что я получаю ниже

См. код here. Чтобы узнать, какая ошибка я получаю, введите номер в первой строке (первый столбец доступен только для редактирования в сетке) и введите тот же номер во второй строке, и он даст ошибку, говорящий о дублирующем штрих-коде, чтобы я хотел, чтобы пользователь менял номер, но он не запускает editMethod в этот момент? Помощь Пожалуйста

код:

var portalBarcodeGrid = namespace.extend(com,'com.barcodeGrid'); 

portalBarcodeGrid = {

/*requestInfo : { 
    reOpenMode : true, 
    NextApplicableStep : 'SHIP_LOAN', 
    RequestNumber : 'PAT_10000165', 
    LoanTrackingInfo : [ 
      {LocalNumber : 'LON1', LoanStatusComplete : true }, 
      {LocalNumber : 'LON2', LoanStatusComplete : true }, 
      {LocalNumber : 'LON3', LoanStatusComplete : true }, 
      {LocalNumber : 'LON4', LoanStatusComplete : true }, 
      {LocalNumber : 'LON5', LoanStatusComplete : true }, 
    ] 
},*/ 

requestInfo : { 
    NextApplicableStep : 'SHIP_LOAN', 
    RequestNumber : 'PAT_10000165', 
    LoanTrackingInfo : [ 

    ] 
}, 

requestProcessStatus : { 
    LoanTrackingInfo : [ 
     //{LocalNumber : '', ProcessStatus : ''} 
    ] 
}, 

processStatus : { 
     PENDING : 'Pending', 
     PROCESSING : 'Processing', 
     PROCESSSUCCESS : 'Process Success', 
     PROCESSFAILED : 'Process Failed', 
     UNDOSUCCESS : 'Undo Success', 
     UNDOFAILED : 'Undo Failed' 
}, 

initializeBarcodeGrid : function(gridSelector) { 
    $(gridSelector).jqGrid({ 
     datatype : "local", 
     width : 'auto', 
     height : 'auto', 
     gridview : true, 
     shrinkToFit : true, 
     colNames : [ 'Barcode', 'Status' ], 
     colModel : [ {name : 'LocalNumber',resizable : false,sortable : false, editoptions: { maxlength: 15 }}, 
        {name : 'ProcessStatus',resizable : false,sortable : false}, 
        ], 
     onSelectRow : function(rowId, status, e) { 
      portalBarcodeGrid.onBarcodeGridSelectRow(gridSelector, rowId); 
     }, 
     editurl: 'clientArray', 
    }); 

    // apply height and width rules to parent of the grid 
    $(gridSelector).parents('div.ui-jqgrid-bdiv').css("max-height","120px"); 
    $(gridSelector).parents('div.ui-jqgrid-bdiv').css("max-width","480px"); 
    $(gridSelector).parents('div.ui-jqgrid-bdiv').css("overflow-x","hidden"); 
}, 



selectBarcodeGridRow : function (rowId) { 
    console.log(" selectBarcodeGridRow "); 
    var gridSelector = '#'+ portalBarcodeGrid.getGridSelectorId(rowId); 
    $(gridSelector).jqGrid("setSelection", rowId, true); 
}, 


getGridSelectorId : function (rowId){ 
    return $('#' +rowId).closest('table').attr('id'); 

}, 

onBarcodeGridSelectRow : function (gridSelector, rowId) { 
    console.log(" onBarcodeGridSelectRow "); 
    var currentRowNum = rowId.split('-')[1]; 
    var editableRowId = $(gridSelector).find(':input').parent().parent().attr('id'); 
    var editableRowNum = 0; 

    if(editableRowId) 
     editableRowNum = editableRowId.split('-')[ 1 ]; 

    if(editableRowId && editableRowId != rowId){ 

     //portalBarcodeGrid.selectBarcodeGridRow(gridSelector, editableRowId); 
     $(gridSelector).jqGrid('saveRow', editableRowId, '', '', '', portalBarcodeGrid.getRowData); 

     //portalBarcodeGrid.selectBarcodeGridRow(gridSelector, rowId); 
     var prevTdText = $.trim($('#'+editableRowId).find('td:first').text()); 

     if(prevTdText.length > 0 && ++editableRowNum == currentRowNum){ 
      var gridDataObj = $(gridSelector).jqGrid('getRowData', rowId); 

      if(gridDataObj && gridDataObj.ProcessStatus == portalBarcodeGrid.processStatus.PROCESSSUCCESS) 
       $(gridSelector).jqGrid('editRow', rowId, true, portalBarcodeGrid.addRows(rowId), '', '', '' , portalBarcodeGrid.getRowData); 
     } 
     return; 
    } 
    else{ 
     var gridDataObj = $(gridSelector).jqGrid('getRowData', rowId); 

     if(gridDataObj.ProcessStatus != portalBarcodeGrid.processStatus.PROCESSSUCCESS && (portalBarcodeGrid.requestInfo.NextApplicableStep == 'SHIP_LOAN' || portalBarcodeGrid.requestInfo.NextApplicableStep == 'RECEIVE_LOAN') ){ 
      portalBarcodeGrid.addEditableProperty(gridSelector, rowId); 
     } 
     else{ 
      portalBarcodeGrid.putValueInTextBox('#txtBarcode',gridDataObj.LocalNumber); 
     } 
    } 
}, 

putValueInTextBox : function(selector,barcode) { 
    $(selector).val(barcode); 
}, 


addInitialGridRecord : function (gridSelector) { 
    if(portalBarcodeGrid.requestInfo.reOpenMode == true){ 
     portalBarcodeGrid.createBarcodeGridRows(gridSelector, portalBarcodeGrid.requestInfo.LoanTrackingInfo); 
    } 
    else if(portalBarcodeGrid.requestInfo.NextApplicableStep == 'SHIP_LOAN' || portalBarcodeGrid.requestInfo.NextApplicableStep == 'RECEIVE_LOAN'){ 
     portalBarcodeGrid.createBarcodeGridEmptyRows(gridSelector,6) 
    } 
    else if(portalBarcodeGrid.requestInfo.NextApplicableStep == 'RETURN_LOAN' || portalBarcodeGrid.requestInfo.NextApplicableStep == 'COMPLETE_LOAN'){ 
     portalBarcodeGrid.createBarcodeGridRows(gridSelector, portalBarcodeGrid.requestInfo.LoanTrackingInfo);  
    } 
}, 


createBarcodeGridEmptyRows : function(gridSelector,noOfRows) { 
    var gridId = gridSelector.split('#')[1]; 

    for(var i = 0; i < noOfRows; i++){ 

     var obj = {}; 

     obj.LocalNumber = ''; 

     if(i == 0) 
      obj.ProcessStatus = portalBarcodeGrid.processStatus.PENDING; 
     else 
      obj.Status = ''; 

     portalBarcodeGrid.requestProcessStatus.LoanTrackingInfo.push(obj); 

     $(gridSelector).jqGrid('addRowData', gridId+'_tr-'+(i+1), obj); 
    } 

    // select first row of the grid 
    var rowId = $(gridSelector).getDataIDs()[0]; 
    portalBarcodeGrid.selectBarcodeGridRow(rowId); 
}, 


createBarcodeGridRows : function(gridSelector, loanTrackingInfo) { 
    var loanTrackingCount = loanTrackingInfo == undefined || loanTrackingInfo.length == 0 ? 1 : loanTrackingInfo.length; 
    var numOfRows = Math.ceil((loanTrackingCount + 1)/6) * 6; 
    var lastDataRowId = 0; 

    portalBarcodeGrid.createBarcodeGridEmptyRows(gridSelector, numOfRows); 

    var arrayRef = loanTrackingInfo; 
    var gridId = gridSelector.split('#')[1]; 
    var getArrDataId = $(gridSelector).jqGrid('getDataIDs'); 

    for(var i = 0; i < arrayRef.length; i++){ 
     $(gridSelector).jqGrid('setCell', getArrDataId[i], 'LocalNumber', arrayRef[i].LocalNumber); 

     if(arrayRef[i].LoanStatusComplete) 
      $(gridSelector).jqGrid('setCell', getArrDataId[i], 'ProcessStatus', portalBarcodeGrid.processStatus.PROCESSSUCCESS); 
     else 
      $(gridSelector).jqGrid('setCell', getArrDataId[i], 'ProcessStatus', portalBarcodeGrid.processStatus.PENDING); 

     lastDataRowId = getArrDataId[i]; 
    } 

    if(portalBarcodeGrid.requestInfo.reOpenMode){ 
     portalBarcodeGrid.addPendingMsg(gridSelector, gridId, lastDataRowId); 
    } 
}, 

addPendingMsg : function(gridSelector, gridIdToAppendToRowId, lastDataRowId) { 
    var pendingRowNum = lastDataRowId.split('-')[ 1 ]; 
    portalBarcodeGrid.addPendingRow(gridSelector, gridIdToAppendToRowId+'_tr-'+(++pendingRowNum)); 
}, 

addPendingRow : function (gridSelector,rowId) { 
    portalBarcodeGrid.selectBarcodeGridRow(rowId); 
    $(gridSelector).jqGrid('setCell', rowId, 'ProcessStatus', portalBarcodeGrid.processStatus.PENDING); 
}, 

addEditableProperty : function(gridSelector,rowId){ 
    console.log(" addEditableProperty "); 

    var prevTdText = $.trim($('#'+rowId).prev('tr').find('td:first').text()); 
    var rowNum = rowId.split('-')[ 1 ]; 

    if(rowNum == 1) { 
     $(gridSelector).jqGrid('setColProp', 'LocalNumber', { editable : true }); 
     $(gridSelector).jqGrid('editRow', rowId, true, '', '', '', '', portalBarcodeGrid.getRowData); 
    } 

    if(rowNum > 1) { 
     if(prevTdText.length < 1){ 
      $(gridSelector).jqGrid('setColProp', 'LocalNumber', { editable : false }); 
     } 
     else{ 
      $(gridSelector).jqGrid('setColProp', 'LocalNumber', { editable : true }); 
      $(gridSelector).jqGrid('editRow', rowId, true, portalBarcodeGrid.addRows(rowId), '', '', '' , portalBarcodeGrid.getRowData); 
     } 
    } 
}, 

addRows : function(rowId) { 
    console.log(" addRows "); 

    var gridSelector = '#'+ portalBarcodeGrid.getGridSelectorId(rowId); 

    var gridId = gridSelector.split('#')[ 1 ]; 

    var lastrowid = $(gridSelector).jqGrid('getDataIDs').pop(); 
    var prevTD = $.trim($('#'+rowId).prev('tr').find('td:first').text()); 

    if (rowId == lastrowid) { 
     if(prevTD.length > 1) { 
      var rowId = lastrowid.split('-')[1]; 
      for (var i = 0; i < 6; i++) { 
       var obj = {}; 
       var addRow = $(gridSelector).jqGrid('addRowData', gridId+'_tr-'+(++rowId),obj); 
      } 
     } 
    } 
}, 

getRowData : function(rowId,result) { 
    console.log(" getRowData "); 

    var gridSelector = '#'+ portalBarcodeGrid.getGridSelectorId(rowId); 

    var gridDataObj = $(gridSelector).jqGrid('getRowData', rowId); 

    if($.trim(gridDataObj.LocalNumber) != 0){ 

     var barcodeDuplicate = portalBarcodeGrid.getDuplicateBarcode(gridSelector, rowId, gridDataObj); 

     if(!barcodeDuplicate) { 
      $(gridSelector).jqGrid('setCell', rowId, 'ProcessStatus', portalBarcodeGrid.processStatus.PROCESSSUCCESS); 
      var rowNum = rowId.split('-')[1]; 
      var nextTrId = $('#'+rowId).next('tr').attr('id'); 

      //get the next row in grid and put focus onto it 
      portalBarcodeGrid.selectBarcodeGridRow(nextTrId); 
     } 
     else { 
      $('#'+rowId).find(':input').select(); 
      $(gridSelector).jqGrid('restoreRow', rowId ,true); 
      portalBarcodeGrid.selectBarcodeGridRow(rowId); 
     } 
    } 
    else{ 
     //$('#divError').text("Please enter a Barcode"); 
     $(gridSelector).jqGrid('restoreRow', rowId, true); 
    } 
}, 

getDuplicateBarcode : function (gridSelector, rowId) { 
    console.log(" getDuplicateBarcode "); 

    var barcodeDuplicate = false ; 
    var currentRowData = $(gridSelector).jqGrid('getRowData', rowId); 
    var gridRows = $(gridSelector).find('tr'); 

    for(var i = 0; i < gridRows.length; i++){ 
     gridRowId = $ (gridRows [i]).attr('id'); 

     if (currentRowData.LocalNumber == $(gridRows[i]).find('td:first').text() && rowId != gridRowId) { 
      $('#divError').text("Duplicate Barcode"); 
      barcodeDuplicate = true; 
     } 
    } 
    return barcodeDuplicate; 
}, 

};

ответ

0

Окончательно найдено решение Библиотека jqGrid не позволяет редактировать строку при ошибке, потому что они отключают событие ввода ключа в функции сохранения. Исправление Удалить эту строку коды из самой библиотеки, и она работала:

$(ind).removeClass("jqgrid-new-row").unbind("keydown"); 

Надеется, что это помогает кому-то !!!

Смежные вопросы