在内联编辑中,在进行编辑之前,它会在内部创建一个数组(savedRow
),并使用可编辑字段的值填充它,以便我可以访问此值。
我想知道在表单编辑中是否有与此类似的内容,因为我需要在编辑完成之前访问字段的值以在字段“保存”之前进行验证数据库中。
有人可以帮助我吗?
已编辑:
我在这里发布了我的代码的一部分(一个字段的代码),我正在尝试以两种方式进行验证(内联编辑和表单编辑)。对于内联编辑我正在使用dataEvents
进行验证,并且我正在使用savedRow
来访问尚未存储的数据。但是当我因为使用savedRow而尝试使用表单编辑进行编辑时,它会向我显示错误: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,我希望此验证也可用于内联编辑)?
答案 0 :(得分:1)
jqGrid保存区间savedRow
参数中的编辑行的原因是因为jqGrid 修改了编辑行的原位。仅因为内联编辑和单元格编辑使用间隔savedRow
参数。表格编辑不会修改原始的网格行,直到编辑完成。因此,表单编辑不会使用savedRow
参数。
如果表单已关闭或服务器响应中包含一些错误HTTP代码,则用户输入的新数据将不会保存在网格中。如此简单的服务器端验证通常就足够了。如果您希望实施其他客户端验证,则可以使用editrules功能。 Custom validation通常就足够了。它可以帮助验证表单的一个字段。如果您需要在验证期间比较多个表单字段(如果一个字段的值定义了另一个字段的有效值),那么另外还会使用beforeCheckValues回调。
更新:在fn
事件处理程序内部,您可以测试是否在表单编辑内部调用它。有很多方法可以做到这一点。例如,您可以测试$(e.target).closest(".FormGrid").length > 0
。如果是真的那么事件就在形式之内。此外,了解当前编辑行在服务器上成功保存之前不会更改非常重要。因此,您可以随时getGridParam
使用"selrow"
选项来获取编辑行的ID,并且可以在修改开始之前使用getRowData
或getCell
从网格中获取数据(与savedrow
)相同。