jQuery Validate:显示组错误消息,直到所有字段都正确

时间:2013-10-17 12:01:07

标签: jquery forms jquery-validate

我已将两个输入字段分组,因此无论有多少输入字段无效,它都只显示一条错误消息。

如果我将它们都留空并尝试提交表单,我的问题就出现了 - 只要我在其中一个中输入任何内容,错误消息就会消失。如果我选择并取消选择空输入字段,它会重新出现。

我希望只要一个或多个输入字段无效,就会保留错误消息。并且当两个空输入字段中的一个填写完毕时,防止错误消息消失。

这是我的代码:

HTML

<form>
    <div>
        <label for="fname">First Name</label>
        <input name="fname" id="fname" class="required">
    </div>
    <div>
        <label for="lname">Last Name</label>
        <input name="lname" id="lname" class="required">
    </div>
    <input type="submit" />
</form>

的Javascript

$("form").validate({
    groups: {
        name: 'fname lname'
    },

    errorPlacement: function (error, element) {
        if (element.attr('name') == 'fname' || element.attr('name') == 'lname')
            error.insertAfter('#lname');
    }
});

JSFiddle

谢谢!

1 个答案:

答案 0 :(得分:5)

引用OP:

  

&#34;如果我将它们都留空并尝试提交表单,我的问题就出现了 - 只要我在其中一个中输入任何内容,错误消息就会消失。如果我选择并取消选择空输入字段,它会重新出现。&#34;

是的,您已将两个错误消息合并为一个。因此,只要满足活动字段的条件,消息就会清除。你不能使它符合第2场条件,同时它需要准确地遵循第1场条件......它只是一次处理一个。

引用OP:

  

&#34;我想要的是,只要一个或多个输入字段无效,错误消息就会保留。并且当两个空输入字段中的一个填写完毕时,防止错误消息消失。&#34;

只要您使用groups选项,它就会完全按照设计运作。

groups选项是专门针对某些方法设计的,例如require_from_group,当您想要填写一组元素中的一个元素时,您不需要查看相同的消息在每个元素上重复。 groups允许您为这组字段使用单个消息。 (这是单个消息对应于单个条件的位置,但是,您尝试使单个消息符合多个条件。)

也许您会想要使用showErrors功能。

这样的事情(相应调整):

$("form").validate({
    showErrors: function (errorMap, errorList) {
        $("#summary").html("Your form contains " + this.numberOfInvalids() + " errors:");
        this.defaultShowErrors();
    },
    errorPlacement: function () {
        return false; // <- kill default error labels
    }
});

DEMO:http://jsfiddle.net/wdDtR/

另一个版本经过调整,表现得更像原版:

$("form").validate({
    showErrors: function (errorMap, errorList) {
        $("#summary").html("field is required");
        if (this.numberOfInvalids() > 0) {
            $("#summary").show();
        } else {
            $("#summary").hide();
        }
    },
    errorPlacement: function () {
        return false; // <- kill default error labels
    }
});

DEMO:http://jsfiddle.net/wdDtR/3/