jQuery Validate – 我可以在更改之后重新validation一组字段吗?

我正在使用jQuery Validate,并且无论何时更改其中一个字段(或者可能,只要其中一个字段成功validation),它就会重新validation一组字段。 到目前为止,我的尝试只会产生无限循环

这可能,或插件设计是否排除它?

(具体来说,我有一个方法需要填写Y组中的至少X个 ,并且一旦这是真的,我希望所有这些字段重新validation。目前我正在清除他们的错误消息使用我自己的代码,但这是一个黑客 – 它还隐藏了不相关的validation问题,直到重新提交表单。)

validate方法有一些选项可以支持对更改进行重新validation ,即:

$(".selector").validate({ onfocusout: true, onkeyup: true, onclick: true, //The rest of your options }); 

这些都默认为false ,但应该提供您在问题中提到的function。

根据评论更新:给出一个简单的测试表格,如下所示:

 

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()让元素知道不会导致无限循环。 正在编辑的实际元素,模糊(validation触发器的正常原因) 重新validation您在组中指定的选择器中的其他元素,因此整个表单不像我的注释…它只触发它在最小元素数量。

不知道这是如何工作的,但是,发现删除下面的部分:

 if(!$(element).data('reval')) { var fields = $(options[1], element.form); fields.data('reval', true).valid(); fields.data('reval', false); } 

主代码中的代码使所有validation工作正常和预期。 🙂