2016-05-09 41 views
-1

我们知道有几个插件可以在HTML表单上使用jQuery执行验证。使用“验证规则”验证“运行时JSON数组”

我们使用jQuery Datatables,使用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验证插件使用例如格式,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”验证好与“规则”阵列定义的规则。

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

此外,HTML FORM元素(文本字段)由jQuery Datatables Editor动态生成。所以不要选择在jQuery验证插件上设置表单类型init。

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

+0

JQuery的数据表编辑器动态生成的飞行输入表单域及相关信息。没有包装表单,因此我们可以调用.validate()。即使尝试这样做,它也会对现有数据表编辑器逻辑/侦听器产生其他干扰。 将JSON数组(ROW数据)与验证规则进行匹配的简单解决方案。正在检查此行中的解决方案,它可以匹配来自“rowData”和“rules”的规则,并为与“rowData”中的数据不匹配或具有错误的规则输出任何验证消息。 – mike39

+0

问题在于要求为“rowData”(动态JSON命名数组)与“规则”(预定义的验证规则)匹配的解决方案。 不确定为什么问题被降级。我试图找到解决实际问题的解决方案(“比较JSON命名数组”到“验证规则”),而不重新开发所有验证规则。 JQuery验证插件似乎已经完成了对不同验证组合的所有研究。公开功能不仅用于比较表单,而且还用于比较Dynamic JSON(Key:Value Pair)数组将使其成为更加动态和实用的实用程序插件。 – mike39

回答

0

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

0

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

您不能“动态”将任何内容送入rules对象。由于.validate()被称为一旦在页面加载初始化插件,它不能被再次调用......它被忽略。

另外HTML FORM元素(Text Field)是由jQuery Datatables Editor动态生成的。所以不要选择在jQuery验证插件上设置表单类型init。

虽然无法初始化使用.validate()动态字段,显影剂提供了一个名为方法,可以调用动态分配,更新或删除规则从任何形式的输入元件随时。所以你必须解析您的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 
    }); 
}); 

备选地,可以简单的任何形式的输入元件和所述jQuery验证插件将拾取器上使用HTML5 validation attributes和自动使用这些,即使是在动态创建的元素。

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

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


编辑

报价OP's Comment

“没有包装form本身上,我们可以请致电.validate()

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

+0

我们确实不会重写Datatable Editors逻辑/侦听器,并将它留在编辑器的表单元素生成和提交上。 我们想要应用这些验证规则的地方是在向服务器发出Ajax请求之前,在Editors函数中,我们可以访问JSON名称/值数组对中的表数据。所以我们在这里试图验证名称数组为验证规则。 使用HTML5验证属性的第二种方法将需要扩展不同字段的Datatable编辑器功能。 – mike39

+0

@ mike39,看我的编辑。 – Sparky