我有一个jQuery验证的自定义方法(基于Sparky's answer的相关问题),它检查以确保一组四个文本字段中的一个具有值。这工作正常,除了我刚刚注意到即使错误消息在其中一个字段中输入值时消失,错误类仍保留在原位,因此文本字段以错误颜色突出显示(本例中为红色背景) )。
关于如何解决这个问题的任何想法?
感谢。
这是问题的jsfiddle。
这是我的剧本:
$(document).ready(function () {
$.validator.addMethod("textboxrule", function (value, element) {
return ($('#my_text_field_1').val() != '' || $('#my_text_field_2').val() != '' || $('#my_text_field_3').val() != '' || $('#my_text_field_4').val() != '')
}, "Select at least one of these four");
$('.my_form').validate({ // initialize the plugin
errorLabelContainer: ".form_errors",
wrapper: "li",
groups: {
somename: "my_text_field_1 my_text_field_2 my_text_field_3 my_text_field_4"
},
rules: {
'my_text_field_1': {
textboxrule: true
},
'my_text_field_2': {
textboxrule: true
},
'my_text_field_3': {
textboxrule: true
},
'my_text_field_4': {
textboxrule: true
}
},
submitHandler: function (form) { // for demo
alert('valid form submitted'); // for demo
return false; // for demo
}
});
});
这是我的HTML:
<form class="my_form" method="post" action="#">
<div>
<ul class="form_errors"></ul>
</div>
<p>
<label>My text field 1</label>
<input id="my_text_field_1" name="my_text_field_1" type="text" value="" /></p>
<p>
<label>My text field 2</label>
<input id="my_text_field_2" name="my_text_field_2" type="text" value="" />
</p>
<p>
<label>My text field 3</label>
<input id="my_text_field_3" name="my_text_field_3" type="text" value="" /></p>
<p>
<label>My text field 3</label>
<input id="my_text_field_4" name="my_text_field_4" type="text" value="" /></p>
<input type="submit" value="Submit" />
</form>
这是我的CSS:
input.error {
background: red;
}
答案 0 :(得分:3)
如果验证通过验证,则需要扩展验证方法以删除错误类。试试这个:
$.validator.addMethod("textboxrule", function (value, element) {
var returnValue = ($('#my_text_field_1').val() != '' || $('#my_text_field_2').val() != '' || $('#my_text_field_3').val() != '' || $('#my_text_field_4').val() != '');
if (returnValue) {
$("#my_text_field_1, #my_text_field_2, #my_text_field_3, #my_text_field_4").removeClass("error");
}
return returnValue;
}, "Select at least one of these four");