validate 方法有一个few options to support re-validating on change,即这些:
$(".selector").validate({
onfocusout: true,
onkeyup: true,
onclick: true,
//The rest of your options
});
这些都默认为false,但应该提供您在问题中提到的功能。
基于 cmets 的更新:给定一个像这样的简单测试表格:
<form action="get">
<div><input type="text" name="part1" class="part"></div>
<div><input type="text" name="part2" class="part"></div>
<div><input type="text" name="part3" class="part"></div>
<div><input type="text" name="part4" class="part"></div>
<input type="submit" value="Submit" />
</form>
jQuery 将如下所示:
jQuery.validator.addMethod("require_from_group", function(value, element, options) {
var valid = $(options[1], element.form).filter(function() {
return $(this).val();
}).length >= options[0];
if(!$(element).data('reval')) {
var fields = $(options[1], element.form);
fields.data('reval', true).valid();
fields.data('reval', false);
}
return valid;
}, jQuery.format("Please fill out at least {0} of these fields."));
$("form").validate({
rules: {
part1: { require_from_group: [2,".part"] },
part2: { require_from_group: [2,".part"] },
part3: { require_from_group: [2,".part"] },
part4: { require_from_group: [2,".part"] }
}
});
你可以在这里玩一个演示,看看这是不是你想要的:http://jsfiddle.net/mhmBs/
这里的方法使用.data() 让元素知道不会导致无限循环。正在编辑的实际元素在模糊(验证触发器的正常原因)时重新验证仅您在组中指定的选择器中的其他元素,而不是像我的评论那样的整个表单。 .it 仅在最少数量的元素上触发它。