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

dxpyg8gm  于 2023-11-17  发布在  jQuery
关注(0)|答案(6)|浏览(132)

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

$("#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"
  }

  });

字符串
这怎么解决?!

j9per5c4

j9per5c41#

有四个潜在的问题。
1)messages部分缺少一个右括号。

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

字符串

DEMO:http://jsfiddle.net/A8HQU/2

2)有a known bug,使用rules('add')方法添加messages会破坏插件和/或规则。请绝对确保您包含jQuery 1.11.1或更高版本。
3)phoneUS规则要求包含the additional-methods.js file
4)rules('add')方法必须在.validate()初始化函数之后。

备注

您正在使用phoneUS规则,因此minlengthmaxlength完全是多余的,因为phoneUS规则已经在寻找精确的格式/长度。

umuewwlo

umuewwlo2#

我遇到了同样的问题,但原因不同。当我把规则“require:true”而不是“required:true”时,同样的问题也会发生。
当您在规则中指定了一个没有对应方法的验证时,就会发生此错误。通过调试,我发现异常正在显示我通过方法名称指定了一个规则“require”。它试图访问hashmap中的方法,并尝试.call(),即使找不到该方法,这也会导致异常。
如果插件作者在这种情况下简单地抛出一个自定义错误,声明“规则'require'没有方法”,那么调试和识别错别字就更容易了。
这也是同样的原因臭名昭著的问题与插件提交,即使字段是无效的。见&投票给我的问题报告-https://github.com/jzaefferer/jquery-validation/issues/1212

zy1mlcev

zy1mlcev3#

作为一个相关的错误,如果你添加一个自定义规则,使用:

$.validator.addMethod('field-is-valid', function (val, element) { ...})

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

$(element).rules('add', {
    "field-valid": true
})


你会得到相同的Cannot call method call of undefined

bmvo0sr5

bmvo0sr54#

运行此示例代码时发生错误:

$(document).ready(function () {

    $.validator.addMethod("numberEqualTo", function (value, element, parameter) {
        return parseInt(value) === parseInt(parameter);
    }, "Values must match");

    $("#example2").validate({
        focusInvalid: false,
        onkeyup: true,
        onfocusout: true,
        errorElement: "div",
        errorPlacement: function (error, element) {
            error.appendTo("div#errors");
        },
        rules: {
            "example2-fullname": {
                required: true,
                minlength: 5
            },
            "example2-phone": {
                required: true,
                number: true
            },
            "example2-zip": {
                required: true,
                number: true,
                rangelength: [3, 5]
            },
            "example2-value": {
                required: true,
                number: true,
                numberEqualTo: 10
            }
        },
        messages: {
            "example2-fullname": {
                required: "You must enter your full name",
                minlength: "First name must be at least 5 characters long"
            },
            "example2-phone": {
                required: "You must enter your phone number",
                number: "Phone number must contain digits only"
            },
            "example2-zip": {
                required: "You must enter your zip code",
                number: "Zip code must contain digits only",
                rangelength: "Zip code must have between 3 to 5 digits"
            },
            "example2-value": {
                required: "You must enter your value",
                number: "Value must be a digit",
                numberEqualTo: "Value must be equal to 10"
            }
        }
    });
});

字符串
为什么?由于某些原因,如果你明确指定:

onkeyup: true,
onfocusout: true,


程序将抛出上述异常。这是当你设置任何或以上两个选项为'true'的情况。另一方面,如果你设置两个为'false'或一个为'false'并删除另一个,它将按预期工作。
最重要的是:如果您删除或注解掉这些选项中的任何一个,您删除的选项将被设置为默认值,即'true'并且不会抛出任何错误。因此,可以按照您想要的方式自定义验证插件,您只需要记住不要显式地将这些选项设置为'true'。

l2osamch

l2osamch5#

上面的代码将无法工作,因为它在属性列表后缺少}

相关问题