使用jquery验证插件验证数组输入

bla*_*elt 13 jquery jquery-plugins jquery-validate

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

<form name="voucherform" action="something" method="post">
  <input type="text" name="reg_number[]" value="" />
  <input type="text" name="reg_number[]" value="" />
  <input type="text" name="reg_number[]" value="" />
  <input type="submit" name="submit" value="submit" />
Run Code Online (Sandbox Code Playgroud)

你能告诉我如何使用jquery验证插件验证上面的表单吗?

谢谢 :)

我的Jquery代码:

 <script type="text/javascript" src="<?php echo base_url();?>support/datepicker/js/jquery-1.7.2.min.js"></script>
 <script type="text/javascript" src="<?php echo base_url();?>support/js/jquery.validate.js"></script>

 <script>
  $(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: '<?php echo base_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")
        },
    }
    });
    });
   </script>
Run Code Online (Sandbox Code Playgroud)

And*_*ker 16

你有两个问题:

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

    您正在寻找form带有id"凭证"的标签,而您的标记不包含一个.您可能希望将选择器更改为:

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

调整验证码:

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: '<?php echo base_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")
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

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

  • 我很抱歉,但我认为你的解决方案工作得很好但我现在注意到,如果你在第一个输入中放置一个值然后点击提交系统没有显示错误消息,其余的输入留空:( (4认同)
  • 看起来插件在这种情况下无法工作...还有另一个 stackoverflow 帖子...必须在 jquery.validate.js 中进行一些更改:http://stackoverflow.com/a/4136430/432513 ans 特别是这个网址:http://www.codeboss.in/web-funda/2009/05/27/jquery-validation-for-array-of-input-elements/ (2认同)

Ale*_*lex 5

你可以在这里找到一个好的答案: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();
}
Run Code Online (Sandbox Code Playgroud)