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

时间:2013-01-09 10:14:14

标签: javascript jquery validation jquery-validate

我有一个自定义规则,应该通过验证此依赖的其他输入来检查某些依赖项。当我做所有其他输入的验证似乎被忽略。

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

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行
  3. 中的调用而显示input1和input2上的错误
  4. 将正确的值插入input1和input2
  5. 点击提交
  6. !!认识到input3未经过验证!!
  7. 重新播放小提琴

    1. 点击提交
    2. 所有字段均按预期验证
    3. 这是我的错还是jQuery验证中的错误?

1 个答案:

答案 0 :(得分:1)

经过一些调试和概述插件代码我有一个解决我的问题的方法。我扩展了验证器插件,以便能够调用内部.check(元素)函数。这个函数只返回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/