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