2

我一定遗漏了一些明显的东西,但我为此尝试的一切都让我两手空空,所以我有点困惑。

我正在尝试将 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
            }
        }
    });
});

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

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

我已经检查并仔细检查了元素选择是否良好。我已经检查过方法本身的一切都很正常。有任何想法吗?

4

2 回答 2

1

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

于 2013-10-25T03:48:48.040 回答
0

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

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

...我不敢相信我在这上面浪费了一个小时。

谢谢你,Sparky,你的建议。

于 2013-10-25T02:48:53.833 回答