我正在使用jQuery和Validate Plugin以及Nathan Long的真棒方法require_from_group,遗憾的是我在验证表单中的其他字段时遇到了问题。
任何超出必填字段集的内容都没有正确显示错误消息。
这个(加上jQuery 1.4.2和Validate插件)是我的代码:
<form>
<label for="fullName">Name <em>required</em></label>
<input id="fullName" name="fullName" type="text" class="required"><br />
<fieldset>
<legend>Enter 1 of 3 emails <em> required</em></legend>
<label for="field1">field1</label><input id="field1" class="group_required email" type="text" name="field1" /><br />
<label for="field2">field2</label><input id="field2" class="group_required email" type="text" name="field2" /><br />
<label for="field3">field3</label><input id="field3" class="group_required email" type="text" name="field3" /><br />
</fieldset>
<input name="submitbutton" type="submit" />
</form>
<script>
jQuery.validator.addMethod("require_from_group", function(value, element, options) {
numberRequired = options[0];
selector = options[1];
//Look for our selector within the parent form
var validOrNot = $(selector, element.form).filter(function() {
// Each field is kept if it has a value
return $(this).val();
// Set to true if there are enough, else to false
}).length >= numberRequired;
if(!$(element).data('being_validated')) {
var fields = $(selector, element.form);
//.valid() means "validate using all applicable rules" (which
//includes this one)
fields.data('being_validated', true).valid();
fields.data('being_validated', false);
}
return validOrNot;
// {0} below is the 0th item in the options field
}, jQuery.format("Please fill out at least {0} of these fields."));
$(document).ready(function(){
$("form").validate({
debug: true,
});
jQuery.validator.addClassRules("group_required", {require_from_group: [1, ".group_required"]});
});
</script>
实际页面更复杂,但这是复制问题所需的所有代码。提交表单而不填写任何字段,您将在组中的3旁边看到错误消息,但不会看到名称字段。如果在字段集验证后,名称字段在HTML中,则可以正常工作。给名称字段焦点然后模糊会产生正确的错误消息,但它不会出现在提交中。
我在原始问题的评论中看到其他人遇到此问题,但没有看到任何回复:(
评论:
fields.data('being_validated', true).valid();
修复了错误信息显示问题,但重新介绍了Nathan试图解决的问题。
答案 0 :(得分:0)
您不必为其他字段添加规则吗?
$("form").validate({
debug: true,
rules: {
'fullName': {
required: true
}
}
});