В настоящее время я использую afterSaveCell для ручного обновления некоторых ячеек в сетке. У меня это работает нормально, если пользователь использует ввод, чтобы сохранить текущую редактируемую ячейку.
К сожалению, если они щелкнут или выйдут из ячейки, которую они редактируют, непосредственно в другую ячейку, я больше не смогу получить значение ячейки только что отредактированной ячейки, поскольку getCell вернет только html для элемента управления вводом.
Таким образом, есть ли способ получить доступ к значению ячейки даже во время ее редактирования?
jQuery(document).ready(function () {
var mydata = [
{id:"1", invdate:"2007-10-01",name:"test", note:"note", amount:"200.00",tax:"10.00",total:"210.00"},
{id:"2", invdate:"2007-10-02",name:"test2", note:"note2", amount:"300.00",tax:"20.00",total:"320.00"},
{id:"3", invdate:"2007-09-01",name:"test3", note:"note3", amount:"400.00",tax:"30.00",total:"430.00"},
{id:"4", invdate:"2007-10-04",name:"test", note:"note4", amount:"200.00",tax:"10.00",total:"210.00"},
{id:"5", invdate:"2007-10-05",name:"test5", note:"note5", amount:"300.00",tax:"20.00",total:"320.00"},
{id:"6", invdate:"2007-09-06",name:"test", note:"note6", amount:"400.00",tax:"30.00",total:"430.00"},
{id:"7", invdate:"2007-10-04",name:"test7", note:"note7", amount:"200.00",tax:"10.00",total:"210.00"},
{id:"8", invdate:"2007-10-03",name:"test8", note:"note8", amount:"300.00",tax:"20.00",total:"320.00"},
{id:"9", invdate:"2007-09-01",name:"test", note:"note9", amount:"400.00",tax:"30.00",total:"430.00"},
{id:"10",invdate:"2007-09-08",name:"test10",note:"note10",amount:"500.00",tax:"30.00",total:"530.00"},
{id:"11",invdate:"2007-09-08",name:"test11",note:"note11",amount:"500.00",tax:"30.00",total:"530.00"},
{id:"12",invdate:"",name:"TOTAL", note:"",amount:"",tax:"",total:""}
];
var grid = $("#list");
grid.jqGrid({
cellsubmit: 'remote',
cellurl: '/Example/GridSave',
datatype: "local",
data: mydata,
mtype: 'POST',
colNames: ['Inv No', 'Date', 'Client', 'Amount', 'Tax', 'Total', 'Notes'],
colModel: [
{ name: 'id', index: 'id', width: 65, sorttype: 'int', hidden: true },
{ name: 'invdate', index: 'invdate', width: 120, align: 'center', formatter: 'date', formatoptions: { newformat: 'd-M-Y' }, sortable: false },
{ name: 'name', index: 'name', editable: true, width: 90, sortable: false },
{ name: 'amount', index: 'amount', editable: true, width: 70, formatter: 'number', align: 'right', sortable: false },
{ name: 'tax', index: 'tax', editable: true, width: 60, formatter: 'number', align: 'right', sortable: false },
{ name: 'total', index: 'total', editable: true, width: 60, formatter: 'number', align: 'right', sortable: false },
{ name: 'note', index: 'note', width: 100, sortable: false }
],
rowNum: 1000,
pager: '#pager',
viewrecords: true,
sortorder: "desc",
caption: "afterSaveCell Issue",
height: "100%",
cellEdit: true,
gridComplete: function () {
calculateTotal();
},
afterSaveCell: function (rowid, name, val, iRow, iCol) {
calculateTotal();
}
});
});
function calculateTotal() {
var totalAmount = 0;
var totalTax = 0;
var grid = jQuery("#list");
var ids = grid.jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var id = ids[i];
if (grid.jqGrid('getCell', id, 'name') === "TOTAL") {
grid.jqGrid('setRowData', id, {
'amount': totalAmount,
'tax': totalTax,
'total': totalAmount + totalTax
});
}
else {
totalAmount += Number(grid.jqGrid('getCell', id, 'amount'));
totalTax += Number(grid.jqGrid('getCell', id, 'tax'));
}
}
}
Заранее спасибо!
nextCellиprevCell, которые будут вызываться на TAB или Shift-TAB. См. код функций здесь: github.com/ tonytomov/jqGrid/blob/master/js/ - person Oleg   schedule 25.02.2011dataEvents(см. ячейку и манипулировать ею">stackoverflow.com/questions/4407273/) вeditoptions, чтобы сделать привязку к событию focusout и вызвать saveCell. Вы можете дополнительно использоватьbeforeEditCellдля сохранения последнихiRow,iColнеобходимых параметров в файлеsaveCell. - person Oleg   schedule 26.02.2011clientArray, но он не воспроизводит ошибку. Кажется, что задержка при отправке новых данных ячейки на сервер вызывает создание поля ввода до вызоваafterSaveCell. В примереclientArray, без отправки на сервер,afterSaveCellвызывается до того, как только что отредактированные данные ячейки преобразуются во входные данные. Мне нужно немного больше времени, чтобы создать правильный пример. - person Shawn   schedule 26.02.2011AmountилиTax, а затем щелкнете по другому столбцу после редактирования, вновь переключенный на итог изменится на 0,00 вместо правильного итога. Это происходит потому, что ячейка, которую вы сейчас редактируете, возвращает элемент управления вводомgetCellвместо значения ячейки. Происходит это из-за задержки с удаленнымcellsubmit. Использование локальногоclientArrayне вызывает этой проблемы. - person Shawn   schedule 26.02.2011