jQuery Validation插件this.optional不是一个函数

时间:2017-09-17 06:02:23

标签: javascript jquery meteor

我创建了一个自定义验证。在文档中,我找到了方法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'方法。

这是我的问题?

2 个答案:

答案 0 :(得分:2)

该问题与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.');

答案 1 :(得分:2)

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

标准

this.optional(element)

ES6:

$.validator.prototype.optional(element)