【发布时间】:2012-09-13 02:21:23
【问题描述】:
我正在使用 jqGrid 进行内联编辑以及使用“添加”按钮创建新记录时。
为简单起见,假设我有 2 个字段
Field1 Field2
我需要以下规则
- 如果用户未在 Field1 或 Field2 中输入任何内容,则无需验证
- 如果用户确实输入了数据,他们可以在 Field1 或 Field2 中输入,但不能同时输入
【问题讨论】:
标签: jqgrid
我正在使用 jqGrid 进行内联编辑以及使用“添加”按钮创建新记录时。
为简单起见,假设我有 2 个字段
Field1 Field2
我需要以下规则
【问题讨论】:
标签: jqgrid
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 验证的“对称”版本,以使代码在字段顺序更改的情况下正常工作,如果您使用columnChooser,这可能很重要。如果您无法确定 field1 是否总是在 field2 之前得到验证。
您可以通过使用现有 jqGrid 方法的“子类化”来归档一些附加效果。以the answer 为例。
已更新:The demo 更详细地展示了上述验证思想。
【讨论】:
field1 和field2 变量,并在开始编辑之前重置为undefined。我更新了答案中的代码以使一切更清楚。