jqGrid - 字段验证

时间:2012-09-13 02:21:23

标签: jqgrid

我使用jqGrid进行内联编辑,也使用“添加”按钮创建新记录。

为简单起见,我说有2个字段

Field1   Field2

我需要以下规则

  • 如果用户未在Field1或Field2中输入任何内容,则无需验证
  • 如果用户确实输入了数据,他们可以在Field1或Field2中输入数据,但不能同时输入

1 个答案:

答案 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}},
        ...
    ]
    ...
});

您不应忘记在编辑之前或之后将field1field2变量重置为undefined值(oneditfuncaftersavefunc或某些其他回调)。

我在上面的代码中使用了field1field2验证的“对称”版本,以便在字段更改顺序的情况下使代码工作,如果您使用{{{ 3}}。如果您无法确定在field1之前始终验证field2

您可以通过使用现有jqGrid方法的“子类化”来存档一些其他效果。请参阅columnChooser作为示例。

更新the answer更详细地证明了上述验证理念。