我一定错过了一些明显的东西,但我为此尝试的一切都是空手而归,所以我有点困惑。
我正在尝试将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调用,实际上,并不是一个是在另一个方法之后被调用 - 唯一被调用的是名称。
我已经检查并仔细检查了元素选择是否正常。我已经检查过所有方法本身都很常规。有什么想法吗?
答案 0 :(得分:1)
我不确定name
是否是JavaScript中的保留字,但由于插件使用name属性来跟踪输入,因此您可能应该使用更具创意的词来命名自定义方法。
答案 1 :(得分:0)
好的,答案就像我想象的那样明显和微不足道。
“name”是一个jQuery验证插件关键字。它受到保护。你不能使用它。一旦我将方法的名称更改为“validateName”,一切都顺利完成。
......我简直不敢相信我浪费了一个小时。
谢谢你,Sparky,你的建议。