jQuery验证器 - 无法调用未定义错误的方法'调用' - 动态添加验证

Anb*_*Raj 10 jquery jquery-validate

这是我动态更新jQuery验证的代码.在文档加载中,我创建验证.此代码用于动态更新电话号码验证.应用此验证后,当我在电话号码文本框中输入任何内容时,我无法调用未定义错误的方法"调用".

 $("#phone").rules("remove");

$("#phone")
  .rules(
  "add",
  {
    required:true,
    minlength:5,
    maxlength:20,
    phoneUS:true,
    messages:{
    required: "Enter company phone number",
    minlength:"Phone number should contain a minimum of 5  characters",
    maxlength:"Phone number should contain a maximum of 20  characters",
    phoneUS:"Enter valid phone number"
  }

  });
Run Code Online (Sandbox Code Playgroud)

提前致谢.怎么解决这个?

Spa*_*rky 23

有四个潜在的问题.

1)你错过了该messages部分的结束支撑.

$("#phone").rules("add", {
    required: true,
    phoneUS: true,
    messages: {
        required: "Enter company phone number",
        phoneUS: "Enter valid phone number"
    } //<-- this was missing 
});
Run Code Online (Sandbox Code Playgroud)

演示:http: //jsfiddle.net/A8HQU/2

2)有一个已知的错误,messages使用该rules('add')方法添加会破坏插件和/或规则.绝对确保您包含jQuery Validate版本1.11.1或更高版本.

3)该phoneUS规则要求列入additional-methods.js文件.

4)rules('add')方法必须来到之后.validate()初始化功能.

注意:

你正在使用phoneUS规则,所以minlength并且maxlength完全是多余的,因为phoneUS规则已经在寻找精确的格式/长度.


Jos*_*off 9

我有同样的问题,但原因不同.当我将规则"re​​quire:true"而不是"required:true"放置时,会出现同样的问题.

当您在规则中指定没有相应方法的验证时,会发生此错误.通过调试我发现异常显示我指定了一个规则"re​​quire",方法名称是"required".它尝试访问hashmap中的方法,并尝试.call(),即使找不到该方法,也会导致异常.

如果插件作者只是在这种情况下抛出了一个自定义错误,声明"规则'要求'没有方法",那么调试和识别拼写错误会更容易.

即使字段无效,这也是插件提交臭名昭着的原因.查看并投票选择我的问题报告 - https://github.com/jzaefferer/jquery-validation/issues/1212


tob*_*oni 8

作为相关错误,如果您添加自定义规则,请使用:

$.validator.addMethod('field-is-valid', function (val, element) { ...})
Run Code Online (Sandbox Code Playgroud)

但是在你的规则声明中用错误的名称引用它:

$(element).rules('add', {
    "field-valid": true
})
Run Code Online (Sandbox Code Playgroud)

你会得到同样的Cannot call method call of undefined.