2012-07-30 120 views
0

我有一個jqGrid,其中有用戶列表使用內聯添加/編輯功能。出於某種原因,我無法讓jqGrid保存我調用saveEdit函數時所做的編輯,但如果按下enter鍵,數據將會保存。如果我將jqGrid的inlineNav一行註釋掉,一切都按預期工作。jqGrid - 保存內聯編輯不起作用

爲了澄清,當我的saveEdit函數運行時,沒有請求發送到服務器。當我按回車鍵時,請求被髮送到服務器。任何想法是怎麼回事?

這裏是我的代碼:

var editParams = { 
    afterSubmit: processResponse, 
    successfunc: function(response) { 
     var processed = processResponse(response); 
     if(processed[0] !== true) { 
      $.jgrid.info_dialog($.jgrid.errors.errcap, processed[1], $.jgrid.edit.bClose); 
     } 
     return processed[0]; 
    }, 
    bottominfo: 'Fields marked with an (*) are required', 
    keys: true 
}; 
$.extend($.jgrid.edit, editParams); 
$('#grid') 
    .jqGrid({ 
     datatype: 'json', 
     colNames: ['User ID', 'First Name', 'Last Name', 'Email'], 
     colModel: [ 
      {name: 'usr_id', jsonmap: 'usr_id', width: 75, editable: true, editrules: {required: true}, formoptions: {elmprefix: '(*) '}}, 
      {name: 'usr_fname', jsonmap: 'usr_fname', width: 75, editable: true, editrules: {required: true}, formoptions: {elmprefix: '(*) '}}, 
      {name: 'usr_lname', jsonmap: 'usr_lname', width: 75, editable: true, editrules: {required: true}, formoptions: {elmprefix: '(*) '}}, 
      {name: 'usr_email', jsonmap: 'usr_email', width: 125, editable: true, editrules: {required: true}, formoptions: {elmprefix: '(*) '}} 
     ], 
     grouping: true, 
     shrinkToFit: false, 
     height: 200, 
     width: 800, 
     rowNum: 20, 
     rowList: [10, 20, 30, 40, 50, 100], 
     repeatitems: false, 
     ignoreCase: true, 
     jsonReader: { repeatitems: false, id: 'usr_id'}, 
     pager: '#grid_pager', 
     url: 'dataurl.php', 
     editurl: 'editurl.php', 
     ondblClickRow: inlineEdit, 
     onSelectRow: saveEdit 
    }) 
    .jqGrid('navGrid', '#users_pager', {add: false, edit: false, del: false, refresh: false, search: false}) 
    .jqGrid('inlineNav', '#users_pager', {edit: false, save: false, cancel: false}); //If I comment out this line, everything works perfectly 

var lastSel; 
/* Start editing the row */ 
function inlineEdit(id, iRow, iCol) { 
    $(this).jqGrid('editRow', id, true, function() { focusRow(id, iCol, this); }); 
} 

function focusRow(id, iCol, table) { 
    var ele = document.getElementById(id + '_' + table.p.colModel[iCol].name), 
     length = ele.value.length; 
    ele.focus(); 
    if(ele.setSelectionRange) { //IE 
     ele.setSelectionRange(length, length); 
    } 
    else if(ele.createTextRange) { 
     var range = ele.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', length); 
     range.moveStart('character', start); 
     range.select(); 
    } 
} 

function saveEdit(id) { 
    if(id && id != $(this).data('lastSel')) { 
     /* Save the last selected row before changing it */ 
     $(this).jqGrid('saveRow', $(this).data('lastSel'), editParams); 
     $(this).data('lastSel', id); 
    } 
    $(this).data('lastSel', id); 
} 

預先感謝您向任何人可以幫助我。

回答

1

好的好友,你沒有使用inlineNav,爲什麼你想保持它呢?第二,當你按下回車鍵時,它不會調用你的saveEdit函數,默認情況下功能只是這樣。

我看到你在onSelectRow屬性上保存你的記錄,當按下輸入時,在內聯編輯之後,這將不會被調用。你可以讓你的鑰匙:假。它不會在輸入按鍵時觸發對服務器的請求。

+0

我使用內嵌導航添加記錄。雙擊一行即可進行內聯編輯。 onSelectRow中的方法應該保存該行,但不會調用服務器(始終在沒有ajax請求的情況下返回false)。也許我錯過了什麼? – Kyle 2012-07-31 13:20:54

+0

我會將您的回答標記爲答案,但請留下評論給任何可能會遇到此問題的人(以及我自己)。重讀這幾次後,它突然襲擊了我。儘管我使用'.extend($。jgrid.edit,editParams);',這並不會覆蓋ALL編輯的編輯參數。此外,調用'editRow'不會使用在初始化中定義的默認'editUrl'參數或上面提到的擴展'$ .extend'。如果我在這裏有任何錯誤,請糾正我,因爲我的印象是擴展'jgrid.edit'並提供'editUrl'可以在這裏工作。 – Kyle 2012-07-31 15:04:32

+0

最後一件事。我的問題的最終解決方案來自奧列格的答案在這裏:http://stackoverflow.com/a/10887652/880685 – Kyle 2012-07-31 15:19:56