我们知道有几个插件可以在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验证。
答案 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/