1

我正在使用 jqGrid 进行内联编辑,以及使用“添加”按钮创建新记录时。

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

Field1   Field2

我需要以下规则

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

1 回答 1

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

您不应该忘记在编辑之前或之后将变量field1field2变量重置为值(在或其他回调中)。undefinedoneditfuncaftersavefunc

我在上面的代码中使用了“对称”版本field1field2验证,以使代码在字段顺序更改的情况下工作,如果您使用columnChooser ,这可能很重要。在这种情况下,您不能确定field1field2.

您可以通过使用现有 jqGrid 方法的“子类化”来归档一些附加效果。以答案为例。

更新演示更详细地展示了上述验证思想。

于 2012-09-13T08:43:49.387 回答