使用自定义方法中的.element(element)时,jQuery验证失败

3
我是一位有用的助手,可以为您翻译文本。

我有一个自定义规则,应该通过验证其他依赖项来验证此输入。当我执行这样的验证时,所有其他输入的验证似乎都被忽略了。

这是我的自定义验证规则:

jQuery.validator.addMethod("checkDependencies", function (value, element) {
  var valid1 = jQuery('form#add-lottery-form').validate().element('#input-1');
  var valid2 = jQuery('form#add-lottery-form').validate().element('#input-2');

  if (valid1 && valid2) {
    return true;
  } else {
    return false;
  }

}, 'dependencie error');

我创建了一个jsfiddle来展示我的问题:
http://jsfiddle.net/AQcrW/ 重现步骤:
  1. 在input4中输入内容(这是一个自定义规则“checkDependencies”的输入)[JavaScript部分第1行]
  2. 由于JS第2行和第3行的调用,input1和input2上显示错误
  3. 将正确的值插入到input1和input2中
  4. 点击提交
  5. !!注意到input3未经过验证!!
重新运行fiddle
  1. 点击提交
  2. 所有字段都按预期进行了验证
这是我的错还是jQuery验证中的一个bug?

@salexch,这对你有效吗?对我来说不行... http://jsfiddle.net/6Qt8c/ 我的意思是,你能否获得“依赖项错误”错误消息? - chsymann
http://jsfiddle.net/AQcrW/3/ 我改变了规则,请查看... 仍然没有正确工作... 验证测试 输入1 tyr 输入2 ytr 请输入数字。 输入3 ytr 请输入数字。 输入4 645 依赖错误 - salexch
1个回答

1
经过一些调试和概述插件代码,我已经找到了解决我的问题的方法。我扩展了验证器插件,使其能够调用内部的.check(element)函数。这个函数只返回true/false。虽然在表单提交时它会做一些重复的工作,但至少目前它可以工作了。所以这里是我添加的代码:

不需要代码-请阅读编辑!

jQuery.extend(jQuery.validator.prototype, {
    check: function (element)
    {
        return this.check(element);
    }
});

这里是工作的fidde:
http://jsfiddle.net/HrPRL/

跟随我的想法,也许可以查看即将进行的讨论:
https://github.com/jzaefferer/jquery-validation/issues/579

编辑:
我刚刚意识到我的非常酷的jQuery扩展没有任何效果...因为.check()方法是原型对象的一部分,你已经可以访问它。所以上面的代码是不需要的。

编辑2:
这就是我最终得出的结果。它能够工作,但我认为有些东西可以优化。
有更好的想法吗?
http://jsfiddle.net/HrPRL/6/
我完成了...这对我的意图足够了:http://jsfiddle.net/HrPRL/8/


@salexch,你能给我一个例子吗?我唯一看到的(而且我已经知道了)就是当你在解决依赖错误后没有将焦点放在无效字段上...我会处理这个问题。 - chsymann
1
试试这个吧..我不说它比你的好..http://jsfiddle.net/AQcrW/5/ 它更通用。 - salexch
我真的很喜欢这个,但又出现了一个问题。在我在 GitHub 上的第二篇帖子中(链接如上),我遇到了这个问题。.valid() 会重置所有找到的错误,之后可以提交没有“input3”有效数据的表单。感谢分享你的方法! - chsymann
那还是不行。尝试:在第四个输入框中输入文本。在第一个和第二个输入框中输入文本。点击提交。 - chsymann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接