使用“验证规则”验证“运行时JSON数组”

时间:2016-05-09 19:35:41

标签: jquery jquery-validate

我们知道有几个插件可以在HTML表单上使用jQuery执行验证。

我们正在使用jQuery数据表,使用DataTables Editor进行内联编辑。

https://editor.datatables.net/examples/api/clientValidation.html

问题是每次提交一行时,每行中的几个字段都是可编辑的,我们真的不想继续编写“if-else”条件来验证所有可能的可编辑列。

当用户编辑单元格时,我们得到的是JSON名称 - 值数组(当前行数据),例如以这种格式,

var rowData = { 
              fld_name1: "value1",
              fld_name2: "value2",
              fld_name3: "value3"
              fld_name4: "value4"
              fld_name5: "value5"
           }

想要检查我们是否可以将此数组提供给任何验证规则数组,例如jQuery Validation Plugin使用的格式,https://jqueryvalidation.org/files/demo/

rules: {
            fld_name1: "required",
            fld_name2: "required",
            fld_name3: {
                required: true,
                minlength: 2
            },
            fld_name4: {
                required: true,
                minlength: 5
            },

            fld_name5: "required"
        },

并检查当前“rowData”是否对“rules”数组中定义的规则有效。

这里“rowData”数组是动态数组,为Datatable中的每一行创建了一个单独的实例。

HTML FORM Element(文本字段)也是由jQuery Datatables Editor动态生成的。所以没有选择在jQuery Validation Plugin上设置表单类型init。

我很擅长使用任何可提供此运行时阵列验证功能的jQuery验证。

2 个答案:

答案 0 :(得分:0)

  

当用户编辑单元格时,我们得到的是JSON名称 - 值数组(当前行数据),例如以这种格式....想要检查我们是否可以将此数组提供给任何验证规则数组,例如格式由JQuery Validation Plugin使用

您无法“动态”将任何内容反馈到rules对象中。由于.validate()在页面加载时被称为 一次 以初始化插件,因此无法再次调用它...它被忽略。

  

HTML FORM Element(文本字段)也是由jQuery Datatables Editor动态生成的。所以没有选择在jQuery Validation插件上设置表单类型init。

虽然您无法使用.validate()初始化动态字段,但开发人员提供了一个名为.rules()的方法,您可以调用该方法从任何表单输入元素中动态分配,更新或删除规则时间。因此,您必须解析您的JSON数组并根据需要应用.rules() ...

$('[name="fld_name1"]').rules('add', {
    required: true,
    minlength: 2
});

DEMO:http://jsfiddle.net/ejc1dq8g/

只要您将选择器附加到.each(),就可以一次申请多个字段。

$('[name^="fld_"]').each(function() {
    $(this).rules('add', {
        required: true,
        minlength: 2
    });
});

或者,您可以在任何表单输入元素上使用HTML5 validation attributes,jQuery Validate插件将自动拾取和使用它们,即使在动态创建的元素上也是如此。

<input name="fld_name1" required="required" minlength="2" ....

DEMO 2:http://jsfiddle.net/84zv61n4/

修改

引用OP's Comment

  

“没有包装form,我们可以在其上调用.validate()

如果是这种情况,你绝对不能在没有<form></form>容器的情况下使用jQuery Validate插件。没有解决方法。我希望你能在OP中提到这个关键细节,因为它可以节省时间和时间。努力。

答案 1 :(得分:0)

仅供参考,对于正在寻找运行时JSON命名数组验证解决方案的人来说,以下库解决了这个问题,https://validatejs.org/