jqGrid - 字段验证

Nat*_*Pet 1 jqgrid

我使用jqGrid进行内联编辑,也使用Add按钮创建新记录.

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

Field1   Field2
Run Code Online (Sandbox Code Playgroud)

我需要以下规则

  • 如果用户未在Field1或Field2中输入任何内容,则在需要时不进行验证
  • 如果用户输入数据,则可以在Field1或Field2中输入数据,但不能同时输入两者

Ole*_*leg 5

jqGrid的验证可能性有许多限制,尤其是在内联编辑期间的验证.的方法$.jgrid.checkValues,它实现了验证将被称为(见的源代码),将被读出相应的输入字段的过程中直接调用.所以没有关于其他字段的信息作为当前的验证.

作为解决方法,您可以在字段验证期间保存Field1中的值.Filed2的验证可以对这两个字段进行验证.在自定义的验证是可以的情况下使用的方式.

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}},
        ...
    ]
    ...
});
Run Code Online (Sandbox Code Playgroud)

你应该不要忘了复位field1field2变量undefined之前或编辑(在后的值oneditfunc,aftersavefunc或一些其他的回调).

我在上面的代码中使用了"对称"版本field1field2验证,以便在字段更改顺序的情况下使代码工作,这在使用columnChooser时很重要.在这种情况下,您无法确定field1在此之前是否始终有效field2.

您可以通过使用现有jqGrid方法的"子类化"来存档一些其他效果.见答案作为一个例子.

更新:该演示演示了上述验证的更详细的想法.