【问题标题】:jQuery Validate - can I re-validate a group of fields after changing one?jQuery Validate - 我可以在更改一组字段后重新验证一组字段吗?
【发布时间】:2009-09-04 10:39:59
【问题描述】:

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

这是可能的,还是插件设计排除了它?

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

【问题讨论】:

  • 这是在您提交表单之前还是之后?
  • @Ravish - 主要是在假设提交被阻止并给出错误之后,但在此之前也会很好。
  • 有一个示例页面的链接吗?

标签: jquery jquery-validate


【解决方案1】:

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 仅在最少数量的元素上触发它。 ​

【讨论】:

  • 这些选项中的每一个都与重新验证当前字段有关。我正在尝试重新验证与当前字段相关的字段。换句话说,就是说'如果该字段通过验证,则验证同一类的其他两个字段'或类似的东西。
  • @Nathan - 在更改这些字段时触发完整表单以重新验证选项?
  • @Nathan - 更新了我认为是你所追求的,如果不是,请告诉我。
  • @Nick - 这太棒了!我添加到您的演示中以验证当此测试通过时,它不会清除任何其他错误,例如“这必须是一个数字”。
  • @Nick - 我不熟悉.data() - 非常有趣。感谢您的课程和解决方案的演示。你已经完全赢得了这个代表。
【解决方案2】:

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

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

主代码中的代码使所有验证按预期正常工作。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多