【问题标题】:jqGrid - Validation of fieldsjqGrid - 字段验证
【发布时间】:2012-09-13 02:21:23
【问题描述】:

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

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

Field1   Field2

我需要以下规则

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

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    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 验证的“对称”版本,以使代码在字段顺序更改的情况下正常工作,如果您使用columnChooser,这可能很重要。如果您无法确定 field1 是否总是在 field2 之前得到验证。

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

    已更新The demo 更详细地展示了上述验证思想。

    【讨论】:

    • 嗨 Oleg,我用我的字段替换了 field1、field2,但它没有给出预期的结果,即它验证了 field1 和 field2,因为它们是未定义的。可能有一个你可以指点我的活生生的例子,或者你有吗?
    • @NatePet:我制作了the demo,它设置了field1field2 变量,并在开始编辑之前重置为undefined。我更新了答案中的代码以使一切更清楚。
    • 非常感谢奥列格。非常感谢!
    • 嗨,奥列格,我尝试了您发布的示例。我发现的一个问题是,如果您有 Field1 和 Field2 的值,则会显示错误。哪个工作正常。但是,单击另一行会导致两行都处于编辑模式。如果您单击另一列,它应该重置第一列。希望这是有道理的。我尝试重新加载网格,但没有成功。
    • @NatePet:问题与验证问题无关。请参阅the answer 继续您的问题以及我在哪里发布了解决问题的演示示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多