Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery验证插件验证数组输入_Jquery_Jquery Plugins_Jquery Validate - Fatal编程技术网

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

使用jquery验证插件验证数组输入,jquery,jquery-plugins,jquery-validate,Jquery,Jquery Plugins,Jquery Validate,我有以下表格。我正在尝试使用jquery验证插件验证输入。我试过一些代码,但不起作用。当我点击submit按钮时,它只是进入表单的操作 <form name="voucherform" action="something" method="post"> <input type="text" name="reg_number[]" value="" /> <input type="text" name="reg_number[]" value="" />

我有以下表格。我正在尝试使用jquery验证插件验证输入。我试过一些代码,但不起作用。当我点击submit按钮时,它只是进入表单的操作

<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" />

您能告诉我如何使用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>
您有两个问题:

  • 您没有正确选择
    表单
    元素

    您正在查找具有
    id
    “voucherform”的
    表单
    ,而您的标记不包含该表单。您可能希望将选择器更改为:

    $("form[name='voucherform']").validate({ ... });
    
  • 括号(
    []
    )在JavaScript标识符中无效。这意味着您的脚本没有被正确解析。要解决这个问题,只需将括号中的字段用引号括起来,即
    'reg\u number[]
    而不是
    reg\u 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")
            }
        }
    });
    
    var validator=$([form[name='voucherform'])。验证({
    错误:功能(错误映射、错误列表){
    $(“.errormsg”).html($.map(错误列表,函数(el){
    返回el.message;
    }).加入(“,”);
    },
    包装器:“span”,
    规则:{
    “注册号[]”:{
    要求:正确,
    最小长度:2,
    远程:{
    url:“销售/发票检查”,
    async:false,
    类型:“post”
    }
    }
    },
    信息:{
    “注册号[]”:{
    必填项:“输入注册号”,
    minlength:jQuery.format(“输入至少{0}个字符”),
    远程:jQuery.format(“{0}已在使用”)
    }
    }
    });
    
    示例:

    这是我的方法

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

    希望它对您没有什么帮助。

    您可以在这里找到一个好答案:。在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();
    }
    
    checkForm:function(){
    这个.prepareForm();
    对于(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){
    对于(var cnt=0;cnt
    只需与索引共享一个验证复选框的方法,其中只有一个是必需的

    <input type="checkbox" value="0" name="is_appraisal[0]" class="is_appraisal_f siblingcheckbox" id="is_appraisal_f">
    
    <input type="checkbox" value="1" name="is_appraisal[1]" checked="checked" class="is_appraisal_s siblingcheckbox" id="is_appraisal_s">
    

    很抱歉,我认为您的解决方案工作得很好,但我现在注意到,如果您在第一个输入中输入一个值,然后单击“提交”,则系统不会显示将其余输入留空的错误消息:(@black_belt:您的远程规则是否正常工作?如果它失败,可能会导致其余验证失败。他是对的,此解决方案不起作用。如果您从不关注其他输入,则验证仅对第一行元素有效。@mlwacosmos:您看到示例中的问题了吗?该插件似乎无法在此ca中工作se…还有另一个stackoverflow帖子…jquery.validate.js:ans中的某些内容必须更改,特别是这个url:如果元素名称有索引,我在这里找到了最佳答案,它们被视为唯一名称req_number[0]req_number[1]ect。。。。
           $.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
            });