jqGrid - вопросы редактирования формы
Во встроенном редактировании перед редактированием он создает массив внутри (savedRow
) и заполните его значениями полей, которые редактируются, чтобы я мог получить доступ к этим значениям.
Я хотел бы знать, если в редактировании формы есть что-то похожее на это, потому что мне нужно получить доступ к значениям полей, прежде чем редактирование будет завершено, чтобы выполнить проверку до того, как поля будут "сохранены" в базе данных.
Кто-то может мне помочь?
ИЗДАНО:
Я публикую здесь часть своего кода (код одного поля), и я пытаюсь проверить в обоих направлениях (встроенное редактирование и редактирование формы). Для встроенного редактирования я проверяю, используя dataEvents
и там я использую savedRow
для доступа к данным, которые еще не были сохранены. Но когда я пытаюсь редактировать с помощью редактирования формы из-за использования saveRow, он показывает мне ошибку: savedRow is not defined
, В случае этого поля editrules
соответствует тому, что я хочу сделать, но я не знаю, произойдет ли это во всех этих областях.
{ name: 'ac_fd', index: 'ac_fd', width: 50, editable: true,
formatter: 'number', editrules: { number:true, required:true, minValue: 0.1,
maxValue: 1.0 }, formatoptions: { decimalPlaces: 1, decimalSeparator: '.'},
editoptions: {
dataEvents: [ {
type: 'blur', fn: function(e) {
var savedrow = $("#list").getGridParam('savedRow');
console.log($(this).val());
if($(this).val() != savedrow[0]['ac_fd']) {
var eid='#' + savedrow[0]['id'] + '_ac_fd';
var val_fd=$(this).val();
var fd_min=0.1;
var fd_max=1.0;
if( isNaN(val_fd) || val_fd > fd_max || val_fd < fd_min) {
setTimeout(function(){
$(eid).focus().select();
},600);
$(eid).qtip({
content: {
text: 'Fator de Demanda deve ser um <b>número</b>
entre <b>' + fd_min.toFixed(1) + '</b> e <b>'
+ fd_max.toFixed(1) + '</b>.',
title: {
text: 'Atenção:',
button: true
}
},
show: {
event: false,
ready: true,
effect: function() {
$(this).stop(0, 1).fadeIn(400);
},
delay: 0,
},
hide: {
event: false,
effect: function(api) {
$(this).stop(0, 1).fadeOut(900).queue(function() {
api.destroy();
});
},
},
style: {
classes: 'qtip-red qtip-rounded trif_tip_err',
tip: {
width: 10,
height:12
}
},
position: {
my: 'bottom left',
at: 'top center',
},
events: {
render: function(event, api) {
tip_timer.call(api.elements.tooltip, event);
}
}
});
}
}
}
} ]
}
},
Так что если dataEvents
является общим и используется для трех форм редактирования, где я могу выполнить этот тип проверки (также используя qtip, и я хочу, чтобы эта проверка также использовалась во встроенном редактировании)?
1 ответ
Причина, по которой jqGrid сохраняет интервал редактирования в интервале savedRow
Параметр потому, что jqGrid изменяет строку редактирования на месте. Только из-за этого интервала редактирования inline и редактирования ячейки savedRow
параметр. Редактирование формы не изменяет исходную строку сетки, пока редактирование не будет закончено. Так нет savedRow
Параметр используется при редактировании формы.
Если форма закрыта или если ответ сервера содержит какой-либо код ошибки HTTP, новые введенные пользователем данные не будут сохранены в сетке. Так что простой проверки на стороне сервера обычно достаточно. Если вы хотите реализовать дополнительную проверку на стороне клиента, вы можете использовать функцию editrules. Пользовательской проверки обычно достаточно. Это может помочь проверить одно поле формы. Если вам нужно сравнить несколько полей формы во время проверки (если значение одного поля определяет допустимые значения другого поля), тогда дополнительно используется обратный вызов beforeCheckValues.
ОБНОВЛЕНО: Внутри fn
Обработчик событий вы можете проверить, будет ли он вызываться внутри редактирования формы или нет. Есть много способов сделать это. Например, вы можете проверить $(e.target).closest(".FormGrid").length > 0
, Если это правда, то событие находится внутри формы. Кроме того, важно понимать, что текущая строка редактирования не изменяется до успешного сохранения на сервере. Таким образом, вы можете использовать в любое время getGridParam
с "selrow"
возможность получить идентификатор редактирования строки, и вы можете использовать getRowData
или же getCell
получить данные из сетки до начала изменения (так же, как savedrow
).