jQuery验证六个输入字段作为一个组

时间:2017-01-05 02:55:00

标签: jquery jquery-validate

我正在尝试实现6个表单字段,允许用户键入发送到其电子邮件的6位数代码。 enter image description here

所有这6个字段都是必需的,如果未填写其中任何一个字段,则会在右侧显示错误消息。

在我的代码中,我遇到以下问题

1)如果未填写,则会显示错误消息。这是正确的。

2)只要其中一个被填满,错误信息就会消失。

2a)只有当我点击"提交"按钮然后短暂出现错误消息。一旦我发布了点击,错误消息就消失了。我不确定是否是因为错误消息被覆盖了。

是否可以编写一个方法来检查只要其中一个字段未填充,然后显示错误消息?

λ> ./a.out 
Enter number of rows in A: 2
Enter number of columns in A: 3
Enter number columns in B: 2
2 3 4
1 3 5
3 4
5 6
7 8
Matrix A:
2    3    4    
1    3    5    
Matrix B:
3    4    
5    6    
7    8    
Matrix product:
49   58   
53   62   

1 个答案:

答案 0 :(得分:1)

groups选项仅将所有消息合并为一个。如果所有六个字段都有自己的required规则,那么当一个字段满足时,消息将被清除,然后当另一个字段不满意时,消息将返回,依此类推,切换打开/关闭/等等在田野里移动。

此选项不适用于具有不同消息的多个字段。它旨在用于复杂的规则,如require_from_group,它们总是会在同一时间将相同的消息放在几个字段上。 groups选项按照预期的方式工作,但这不是你想要的。

您可能希望尝试使用require_from_group规则。

$("#verification_form").validate({
    groups: {
        inputGroup: "num1 num2 num3 num4 num5 num6"
    },
    rules: {
        ....
        num1: {
            require_from_group: [6, $("[name^=num]")]
        },
        num2: {
            require_from_group: [6, $("[name^=num]")]
        },
        num3: {
            require_from_group: [6, $("[name^=num]")]
        },
        num4: {
            require_from_group: [6, $("[name^=num]")]
        },
        num5: {
            require_from_group: [6, $("[name^=num]")]
        },
        num6: {
            require_from_group: [6, $("[name^=num]")]
        }
    },
    ...

或者将此规则同时分配给所有六个字段的简短方法......

$("[name^=num]").each(function() {
    $(this).rules('add',{
        require_from_group: [6, $("[name^=num]")],
        messages: {
            require_from_group: "These 6 fields are required"
        }
    });
});

DEMO jsfiddle.net/xbwzt7p9/