使用 jQuery Validate 插件,我有一个自定义方法,可确保至少三分之二的复选框已被选中(根据这个问题)。
这工作正常,除了一旦选中了其中一个复选框,错误容器不会消失(即使错误消息确实消失并且表单将成功提交)。错误容器仍然停留在“显示:块”而不是恢复为“显示:无”。
这是一个JSFiddle演示了这一点(它是我表单的简化版本)。如果选中了三个复选框中的一个,则即使没有错误消息,错误容器也会保留在原处。如果选中所有三个复选框,则错误消息容器会消失。因此,我将不胜感激有关如何根据自定义方法在仅选中一个复选框后使错误容器消失的任何想法,谢谢。
这是我的 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>
这是我的CSS:
input.error { background: #fdf3f3; border: 1px solid #ff3333; color: #ff3333; }
.error-container { background: #fdf3f3; border: 1px solid #ff3333; clear: both; display: none; overflow: auto; padding: 10px; }
.error-container ul { margin-bottom: 0; }
.error-container label { float: none; font-weight: normal!important; width: auto; }
这是我的 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
}
});
});