我使用jqGrid进行内联编辑,也使用“添加”按钮创建新记录。
为简单起见,我说有2个字段
Field1 Field2
我需要以下规则
答案 0 :(得分:5)
jqGrid的验证可能性有许多限制,尤其是在内联编辑期间的验证。实现验证的方法$.jgrid.checkValues
将被调用(参见源代码的the line),将在读取相应的输入字段期间直接调用。因此,没有关于其他字段的信息作为当前的验证。
作为解决方法,您可以在字段验证期间保存Field1中的值。 Filed2的验证可以对这两个字段进行验证。 custom validation是您在案例中可以使用的方式。
var field1, field2,
myCustomCheck = function (value, colname) {
if (colname === "field1") {
field1 = value;
} else if (colname === "field2") {
field2 = value;
}
if (field1 !== undefined && field2 !== undefined) {
// validate the fields here
return [false, "some error text"];
} else {
return [true];
}
};
$("#grid").jqGrid({
...
colModel: [
...
{name: 'field1', editable: true, ...,
editrules: {custom: true, custom_func: myCustomCheck}},
...
{name: 'field2', editable: true, ...,
editrules: {custom: true, custom_func: myCustomCheck}},
...
]
...
});
您不应忘记在编辑之前或之后将field1
和field2
变量重置为undefined
值(oneditfunc
,aftersavefunc
或某些其他回调)。
我在上面的代码中使用了field1
和field2
验证的“对称”版本,以便在字段更改顺序的情况下使代码工作,如果您使用{{{ 3}}。如果您无法确定在field1
之前始终验证field2
。
您可以通过使用现有jqGrid方法的“子类化”来存档一些其他效果。请参阅columnChooser作为示例。
更新:the answer更详细地证明了上述验证理念。