jQuery Validate - 更改后可以重新验证一组字段吗?

时间:2009-09-04 10:39:59

标签: jquery jquery-validate

我正在使用jQuery Validate,并且只要其中一个字段发生更改(或者可能,只要其中一个字段成功验证),就会重新验证一组字段。到目前为止,我的尝试只是创造了无限循环。

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

(具体来说,我已经a method that requires at least X of group Y to be filled out了,一旦确实如此,我希望所有这些字段都重新验证。目前我正在用我自己的代码清除他们的错误消息,但是这是一个黑客 - 它还隐藏了不相关的验证问题,直到重新提交表单。)

2 个答案:

答案 0 :(得分:12)

验证方法有一个few options to support re-validating on change,即:

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

答案 1 :(得分:1)

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

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

使所有验证工作正常和预期。 :)