使用jqueryvalidation插件validation数组输入

我有以下表格。 我试图使用jqueryvalidation插件validation输入。 我尝试过一些代码,但它不起作用。 当我点击提交按钮时,它就会转到表单的动作。

你能告诉我如何使用jqueryvalidation插件validation上面的表单吗?

谢谢 :)

我的Jquery代码:

  <script type="text/javascript" src="support/datepicker/js/jquery-1.7.2.min.js"> <script type="text/javascript" src="support/js/jquery.validate.js">  $(document).ready(function() { // validate signup form on keyup and submit var validator = $("#voucherform").validate({ showErrors: function(errorMap, errorList) { $(".errormsg").html($.map(errorList, function (el) { return el.message; }).join(", ")); }, wrapper: "span", rules: { reg_number[]: { required: true, minlength: 2, remote: { url: 'sales/invoice_check', async: false, type: 'post' }, } }, messages: { reg_number[]: { required: "Enter Reg Number", minlength: jQuery.format("Enter at least {0} characters"), remote: jQuery.format("{0} is already in use") }, } }); });  

你有两个问题:

  1. 您没有正确选择form元素。

    您正在寻找一个id “voucherform”的form ,而您的标记不包含一个form 。 您可能希望将选择器更改为:

     $("form[name='voucherform']").validate({ ... }); 
  2. 括号( [] )在JavaScript标识符中无效。 这意味着您的脚本未正确解析。 要解决此问题,只需将带括号的字段用引号括起来,即'reg_number[]'而不是reg_number[]

调整validation码:

 var validator = $("form[name='voucherform']").validate({ showErrors: function(errorMap, errorList) { $(".errormsg").html($.map(errorList, function(el) { return el.message; }).join(", ")); }, wrapper: "span", rules: { 'reg_number[]': { required: true, minlength: 2, remote: { url: 'sales/invoice_check', async: false, type: 'post' } } }, messages: { 'reg_number[]': { required: "Enter Reg Number", minlength: jQuery.format("Enter at least {0} characters"), remote: jQuery.format("{0} is already in use") } } }); 

示例: http //jsfiddle.net/hfrhs/

我在这里找到了最好的答案https://stackoverflow.com/a/17643385/146553

如果你的元素名称有索引,则将它们视为唯一名称req_number [0] req_number [1]等….

你可以在这里找到一个好的答案: jquery-validation-for-array-of-input-elements 。 在jquery.validate.js中,我们可以找到一个名为checkForm的函数,我们必须修改它如下:

 checkForm: function() { this.prepareForm(); for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) { for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) { this.check( this.findByName( elements[i].name )[cnt] ); } } else { this.check( elements[i] ); } } return this.valid(); } 

这是我的方式

  'reg_number[]':{ required:function(){ return $("input[name='reg_number[]']").filter(function(){ return $.trim($(this).val()).length>0 }).length==0 } } 

希望它对你没什么帮助。

只需共享一个方法来validation带索引的复选框,并且只有其中一个是必需的。

   

Jqueryvalidation:

  $.validator.addMethod("onechecked", function (value, elem, param) { if ($(".siblingcheckbox:checkbox:checked").length > 0) { return true; } else { return false; } }, "You must select at least one!"); $.validator.addClassRules("siblingcheckbox", { onechecked: true });