【问题标题】:jQuery Validation Plugin this.optional is not a functionjQuery 验证插件 this.optional 不是函数
【发布时间】:2018-02-25 22:08:27
【问题描述】:

我创建了一个自定义验证。在文档中我找到了方法addMethod()

我的例子:

Template.Login.onRendered(() => {
  jQuery.validator.addMethod('strongPassword', (value, element) => {
    return this.optional(element)
      || value.length >= 6
      && /\d/.test(value)
      && /[a-z]/i.test(value);
  }, 'Your password must be at least 6 characters long and contain at least one number and one char.');

$('.login-form').validate({
    rules: {
      password: {
        required: true,
        strongPassword: true
      }
    }
  });
});

我得到错误:

_this.optional 不是函数。检查元素时发生异常,检查'strongPassword'方法。

这是我的问题?

【问题讨论】:

    标签: javascript jquery meteor


    【解决方案1】:

    该问题与this 有关。当您使用箭头函数(那里有 2 个案例)时,this 指的是上层的 div 上下文,在您的情况下是 this ,其中 onRendered 已被调用。将arrow function 更改为简单函数以获取适当的this 上下文。

    jQuery.validator.addMethod('strongPassword', function (value, element) {
        return this.optional(element)
          || value.length >= 6
          && /\d/.test(value)
          && /[a-z]/i.test(value);
      }, 'Your password must be at least 6 characters long and contain at least one number and one char.');
    

    【讨论】:

    • $(...).optional 不是函数。
    【解决方案2】:

    我知道这是一个老问题,但我最近在将代码转换为 ES6 后遇到了这个问题。

    标准:

    this.optional(element)
    

    ES6:

    $.validator.prototype.optional(element)
    

    【讨论】:

    • 接受的答案是正确的,但这个答案是正确的。
    • 答案确实有效,但对我来说仍然是个谜,我找不到有关 ES6 和这个特定案例的信息。那么任何人或 Rylee 都可以向我提供它为什么有效的信息吗?
    • @xdevx32 optional 属性是validator 类的标准方法。它似乎不是特定于实例的(即不在其中使用this)所以我们可以调用jQuery.validator原型上的默认方法并将我们的元素作为参数传入
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多