自定义方法成功验证后,jQuery验证错误容器未消失

自定义方法成功验证后,jQuery验证错误容器未消失,jquery,jquery-validate,Jquery,Jquery Validate,使用jQueryValidate插件,我有一个自定义方法,确保至少三个复选框中有一个被选中(根据) 这可以很好地工作,除了选中其中一个复选框后,错误容器不会消失(即使错误消息消失并且表单将成功提交)。错误容器仍停留在“显示:阻止”状态,而不是恢复为“显示:无” 这里有一个例子来说明这一点(这是我表单的简化版本)。如果选中了三个复选框中的一个,则即使没有错误消息,错误容器仍会保留在原位。如果选中所有三个复选框,则错误消息容器将消失。因此,如果您能按照自定义方法,在选中其中一个复选框后,了解如何使错

使用jQueryValidate插件,我有一个自定义方法,确保至少三个复选框中有一个被选中(根据)

这可以很好地工作,除了选中其中一个复选框后,错误容器不会消失(即使错误消息消失并且表单将成功提交)。错误容器仍停留在“显示:阻止”状态,而不是恢复为“显示:无”

这里有一个例子来说明这一点(这是我表单的简化版本)。如果选中了三个复选框中的一个,则即使没有错误消息,错误容器仍会保留在原位。如果选中所有三个复选框,则错误消息容器将消失。因此,如果您能按照自定义方法,在选中其中一个复选框后,了解如何使错误容器消失,我将不胜感激,谢谢

这是我的HTML:

<form class="my_form" method="post" action="#">

  <div class="error-container">
    <ul>
    </ul>
  </div><!--error-container-->

    <p><label>My checkbox 1</label>
    <input class="my_checkbox_group" id="my_checkbox_1"
    name="my_checkbox_1[]" type="checkbox" value="Yes" /></p>
    <p><label>My checkbox 2</label>
    <input class="my_checkbox_group" id="my_checkbox_2"
    name="my_checkbox_2[]" type="checkbox" value="Yes" /></p>
    <p><label>My checkbox 3</label>
    <input class="my_checkbox_group" id="my_checkbox_3"
        name="my_checkbox_3[]" type="checkbox" value="Yes" /></p>
    <input type="submit" value="Submit" />
</form>
以下是我的JS:

$(document).ready(function () {

    $.validator.addMethod("checkboxrule", function (value, element) {
        return ($('#my_checkbox_1').is(':checked') || $('#my_checkbox_2').is(':checked') || $('#my_checkbox_3').is(':checked'))
    }, "Select at least one of these three");

    $('.my_form').validate({ // initialize the plugin
        errorContainer: ".error-container",
        errorLabelContainer: ".error-container ul",
        wrapper: "li",
        focusInvalid: false,
        ignore: "",
        groups: {
            somename: "my_checkbox_1[] my_checkbox_2[] my_checkbox_3[]"
        },
        rules: {
            'my_checkbox_1[]': {
                checkboxrule: true
            },
            'my_checkbox_2[]': {
                checkboxrule: true
            },
            'my_checkbox_3[]': {
                checkboxrule: true
            }
        },
        submitHandler: function (form) { // for demo
            alert('valid form submitted'); // for demo
            return false; // for demo
        }
    });

});
将以下内容添加到
.validate()
选项中

success: function() {
    $('.error-container').hide();
},
演示:


顺便说一句:如果要验证隐藏字段,则
忽略
选项的正确格式不是
忽略:

它应该是
忽略:[]

看看这个答案:


编辑

当您最初编写代码时,错误容器按预期工作,但仅当所有三个复选框都选中时

进一步说,删除
groups
选项后,可以更好地看到此问题,您可以看到三条消息以及单击所有三个复选框时发生的情况。在您单击
submit
之前,该框甚至保留在有效表单上。在单击组中的所有复选框之前,插件不会对此“组”进行验证测试。这很像是将所有三个复选框作为单个输入元素处理

一种可能的解决方案是,每次单击任何一个复选框时,使用强制进行验证测试

$('.my_checkbox_group').on('click', function(){
    $('.my_form').valid();
});

演示:

感谢您的支持,以及关于忽略选项的指针。JSFiddle工作得很好,但是当我将它插入表单时,它无法工作。如果我尝试在不接触任何字段的情况下提交表单,我会得到所有验证错误消息,并按预期显示。如果我在某个字段中输入某个内容或选中某个复选框,则所有验证消息都会消失(而不仅仅是我刚才填写的字段的消息)。这里有一个JSFiddle来演示这一点:对此有什么想法吗?@Stephen,我已经查看了文档,您的原始代码与给出的示例相匹配。根据描述,它应该在不添加
success
回调的情况下正常工作。如果JSFIDLE服务器今晚表现得不像垃圾,我会继续解决你的问题。也许在Github会有这样的事情发生。
$('.my_checkbox_group').on('click', function(){
    $('.my_form').valid();
});