validate メソッドには、変更時の再検証をサポートするいくつかのオプションがあります。具体的には次のとおりです。
$(".selector").validate({
onfocusout: true,
onkeyup: true,
onclick: true,
//The rest of your options
});
これらはすべてデフォルトですがfalse
、質問で言及した機能を提供する必要があります。
コメントに基づく更新: 次のような単純なテスト フォームがあるとします。
<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()
、無限ループを引き起こさないように要素に知らせるために使用します。編集されている実際の要素は、ぼかし (検証トリガーの通常の原因) で、グループで指定したセレクターの他の要素のみを再検証するため、私のコメントのようなフォーム全体ではありません...要素の最小数。</p>