jQuery验证插件addMethod触发错误

时间:2013-10-24 22:57:38

标签: jquery jquery-validate

我一定错过了一些明显的东西,但我为此尝试的一切都是空手而归,所以我有点困惑。

我正在尝试将jQuery验证插件与自定义验证方法一起使用,但它似乎被击中或遗漏。似乎我能够在一定程度上成功添加规则,但是某些方法不适用。或者未应用指定的方法,而是应用了错误的方法。

因此,例如,这可以毫无障碍地工作:

$.validator.addMethod("emailValidation",
    function(value, element) {
        return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/.test(value);
    },
    "Please enter a valid email address."
);
$.validator.addMethod("password",
    function(value, element) {
        return /[^\s]{6,25}/.test(value);
    },
    "Please enter a password between 6 and 25 characters long."
);
...
$(function(){
    $("#registrationForm").validate({
        rules: {
            email: {
                required: true,
                emailValidation: true
            },
            password: {
                required: true,
                password: true
            },
        }
    });
});

密码验证和电子邮件验证都有效。

然后我以同样的方式添加名称的验证测试。所以,在密码方法结束的地方,我添加:

$.validator.addMethod("name",
    function(value, element) {
        return /[^\s]{6,25}/.test(value);
    },
    "Please enter a valid name."
);

将验证调用转换为:

$(function(){
    $("#registrationForm").validate({
        rules: {
            email: {
                required: true,
                emailValidation: true
            },
            password: {
                required: true,
                password: true
            },
            studentFirstName: {
                name: true
            }
        }
    });
});

突然之间,一切都只是在验证名字。现在,电子邮件和密码字段都使用name方法进行验证,名称字段也是如此。

这令人困惑!我已经为所有方法添加了console.log调用,实际上,并不是一个是在另一个方法之后被调用 - 唯一被调用的是名称。

我已经检查并仔细检查了元素选择是否正常。我已经检查过所有方法本身都很常规。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我不确定name是否是JavaScript中的保留字,但由于插件使用name属性来跟踪输入,因此您可能应该使用更具创意的词来命名自定义方法。

答案 1 :(得分:0)

好的,答案就像我想象的那样明显和微不足道。

“name”是一个jQuery验证插件关键字。它受到保护。你不能使用它。一旦我将方法的名称更改为“validateName”,一切都顺利完成。

......我简直不敢相信我浪费了一个小时。

谢谢你,Sparky,你的建议。