首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂形式的Jquery验证复选框(至少一个用于组)

复杂形式的Jquery验证复选框(至少一个用于组)
EN

Stack Overflow用户
提问于 2018-05-31 22:13:28
回答 1查看 2.3K关注 0票数 2

我有一个非常复杂的表单,其中包含X组复选框,如下所示:

代码语言:javascript
复制
<div class="checkbox-block1">
 <input id="package-1-1" name="member[1][package][19]" type="checkbox" class="checkbox" value="100" style="float: left;">
 <input id="package-1-2" name="member[1][package][234]" type="checkbox" class="checkbox" value="300" style="float: left;">
 <input id="package-1-3" name="member[1][package][254]" type="checkbox" class="checkbox" value="500" style="float: left;">
</div>
<div class="checkbox-block2">
 <input id="package-2-1" name="member[2][package][19]" type="checkbox" class="checkbox" value="100" style="float: left;">
 <input id="package-2-2" name="member[2][package][234]" type="checkbox" class="checkbox" value="300" style="float: left;">
 <input id="package-2-3" name="member[2][package][254]" type="checkbox" class="checkbox" value="500" style="float: left;">
</div>

我需要使用规则验证表单,该规则要求至少选中组/块的复选框。我尝试这样做:

代码语言:javascript
复制
      $(document).ready(function () {
            $("#myform-s3").validate({
                rules: {
                    'member[1]': {
                        required: true,
                        minlength: 1
                    },
                    'member[2]': {
                        required: true,
                        minlength: 1
                    },
                    'member[3]': {
                        required: true,
                        minlength: 1
                    }
                },
                errorPlacement: function(error, element) {
                    if ( element.is(':radio') || element.is(':checkbox') ) {
                        error.insertBefore( element.next() );
                    } else {
                        error.insertAfter( element );
                    }
                },
                submitHandler: function (form) { // for demo
                    alert('valid form');
                    return false;
                }
            });

但是当没有选中复选框时,我也得到了“有效表单”。

P.S:块的数量是由用户在以前的表单中选择的,然后我可以有1,2,3或更多块的复选框。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 00:10:05

你的代码...

代码语言:javascript
复制
rules: {
    'member[1]': {  // <- MUST be the NAME of input element

member[1]不是任何东西的name,所以什么都不会发生。这里不能使用部分名称或选择器,只能使用name属性的实际值。

解决方案1

要验证一组复选框,您需要它们都共享相同的name...

代码语言:javascript
复制
<div class="checkbox-block1">
    <input id="package-1-1" name="member[1]" type="checkbox" class="checkbox" value="100" style="float: left;">
    <input id="package-1-2" name="member[1]" type="checkbox" class="checkbox" value="300" style="float: left;">
    <input id="package-1-3" name="member[1]" type="checkbox" class="checkbox" value="500" style="float: left;">
</div>

然后,您可以简单地单独使用required规则...

代码语言:javascript
复制
$(document).ready(function () {
    $("#myform-s3").validate({
        rules: {
            'member[1]': {
                required: true
            }, ....

演示1:

解决方案2

如果不能更改命名,则必须使用.rules()方法和"starts“、^=选择器动态声明规则。

不要在.validate()中声明规则...

代码语言:javascript
复制
$(document).ready(function () {
    $("#myform-s3").validate({
        rules: {
            // other fields maybe
        ....

.rules()方法与.each()required_from_group规则一起使用。注意,required_from_groupthe additional-methods.js file的一部分。

代码语言:javascript
复制
$('[name^="member[1]"]').each(function() {
    $(this).rules('add', {
        require_from_group: [1, $('[id^="package-1"]')]
    });
});

其中,1是该组所需的最小数量,而$('[id^="package-1"]')针对该组的所有成员。

演示2:

在这个版本中,您将获得重复的消息,您必须使用the groups option来处理这些消息。由于您的表单是复杂且动态的,因此在调用.validate()之前需要动态构造此选项。Here is an example

代码语言:javascript
复制
var names1 = ""; // create empty string
$('[id^="package-1"]').each(function() { // grab each input starting w/ the class
    names1 += $(this).attr('name') + " "; // append each name + single space to string
});
names1 = $.trim(names1); // remove the empty space from the end

$("#myform-s3").validate({
    groups: {
        myGroup: names1 // reference the string
    }, 
    ....

演示2b:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50626404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档