如何使用validate plugin jquery验证输入数组

Ami*_*mit 29 jquery jquery-validate

我是jquery验证插件的新手,但我想知道如何使用验证插件验证输入框数组.

下面是html代码.

<form id="transport-form">
  <input type="text" name="qty[]" id="qty1">
  <input type="text" name="qty[]" id="qty2" >
  <input type="text" name="qty[]" id="qty3">
  <input type="text" name="qty[]" id="qty4">
  <input type="submit value="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

和jquery代码如下

jQuery("#transport-form").validate({
        rules: {
            'qty[]': {
                required: true
            }
        },
    });
Run Code Online (Sandbox Code Playgroud)

但每次我点击提交它只验证第一个值.其余所有相同名称的值都未经过验证.请帮忙.

Ami*_*mit 45

有时我们需要验证输入元素数组:例如 -

<form name="signupForm" class="cmxform" id="signupForm" method="get" action="">
    <select name="category[]" id="cat_1">
    <option value="">Select One</option>
    <option value="1">aa</option>
    <option value="2">bb</option>
    <option value="3">cc</option>
    <option value="4">dd</option>
    </select>

    <select name="category[]" id="cat_2">
    <option value="">Select One</option>
    <option value="5">ee</option>
    <option value="6">ff</option>
    <option value="7">gg</option>
    <option value="8">hh</option>
    </select>

    <select name="category[]" id="cat_3">
    <option value="">Select One</option>
    <option value="9">ii</option>
    <option value="10">jj</option>
    <option value="11">kk</option>
    <option value="12">ll</option>
    </select>

    <input class="submit" type="submit" value="Submit">
    </form>
Run Code Online (Sandbox Code Playgroud)

现在我们将使用jquery验证插件jquery.validate.js来验证表单.条件是用户必须从每个下拉列表中选择类别.验证脚本如下 -

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.validate.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
    // validate the comment form when it is submitted
    $("#signupForm").validate({
        rules: {
            "category[]": "required"
        },
        messages: {
            "category[]": "Please select category",
        }
    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

现在问题是现成的jquery.validate.js只验证category []的第一个元素.所以,我们需要稍微修改一下.

在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)

我刚从http://www.codeboss.in/web-funda/2009/05/27/jquery-validation-for-array-of-input-elements/得到了这个解决方案,希望这有助于某人...

  • 如果您可以显示应在“validate”对象的哪个级别添加“checkForm”方法,那将会很有帮助。任何 SO 帖子上都没有人显示在哪里添加新方法。 (2认同)
  • 谢谢..!!它正在工作..我们必须记住一件事..即“每个字段的 ID 必须不同” (2认同)

小智 20

您可以传递一个选项来忽略字段名称的一部分; 至于原始帖子评论,有很多用例在HTML中使用name []样式名称,特别是使用PHP.

$("#my-form").validate({
  submitHandler: function(form) {
    form.submit();
  },
  ignore: [],
  rules: {
    'category[]': {
      required: true
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 如果我们有单个数组,答案看起来很简单,但是如果有人有'category ['user'] ['country']`那怎么办?有没有办法解决这个问题 (4认同)

Qui*_*ten 9

我注意到我使用的jQuery验证插件只会检测具有特定名称的第一个元素.

制作jQuery validate插件的另一种方法是检测除第一个之外的所有输入可以通过使名称唯一.所以你可以替换:

<input type="text" name="qty[]" />
<input type="text" name="qty[]" />
<input type="text" name="qty[]" />
<input type="text" name="qty[]" />
Run Code Online (Sandbox Code Playgroud)

有:

<input type="text" name="qty[0]" />
<input type="text" name="qty[1]" />
<input type="text" name="qty[2]" />
<input type="text" name="qty[3]" />
Run Code Online (Sandbox Code Playgroud)


Chr*_*Sim 7

这是我找到的最佳解决方案,我目前在我的项目中使用:

// Adding rule to each item in qtyi list 
jQuery('[id^=qty]').each(function(e) {
    jQuery(this).rules('add', {
        minlength: 2,
        required: true
    });
});
Run Code Online (Sandbox Code Playgroud)


Aja*_*dar 5

您需要为每个元素建立索引

下面是html代码。

<form id="transport-form">
  <input type="text" name="qty[0]" id="qty1">
  <input type="text" name="qty[1]" id="qty2" >
  <input type="text" name="qty[2]" id="qty3">
  <input type="text" name="qty[3]" id="qty4">
  <input type="submit value="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

jquery 代码如下

jQuery("#transport-form").validate({
    rules: {
        'qty[]': {
            required: true
        }
    },
});
Run Code Online (Sandbox Code Playgroud)