我想使用jQuery Validate插件的自定义验证方法(addMethod)验证文本框,但我的代码不起作用.任何人都可以帮我找到错误吗?我之前从未使用过自定义验证方法,所以我很难找到我在这段代码中出错的地方.
这是我的代码:
$(document).ready(function () { jQuery.validator.setDefaults({ // where to display the error relative to the element errorPlacement: function(error, element) { error.appendTo(element.parent().find('div.myErrors')); } }); jQuery.validator.addMethod( "selectnic" function(value,element){ if(element.value == /^[0-9]{9}[vVxX]$/) return false; else return true; }, "wrong nic number" ); $('#basicDetails').validate({ // initialize the Plugin rules: { fname: { required: true, lettersonly: true, }, lname: { required: true, lettersonly: true, }, }, messages: { fname: { required:"Please enter your first name", lettersonly: "Login format not valid", }, lname: { required:"Please enter your last name", lettersonly: "Login format not valid", }, }, submitHandler: function (form) { alert('valid form submitted'); return false; } }); });
..html代码....
.....编辑我的代码后....
$(document).ready(function () { jQuery.validator.setDefaults({ // where to display the error relative to the element errorPlacement: function(error, element) { error.appendTo(element.parent().find('div.myErrors')); } }); jQuery.validator.addMethod("selectnic", function(value, element){ if (/^[0-9]{9}[vVxX]$/.test(value)) { return false; } else { return true; }; }, "wrong nic number"); $('#basicDetails').validate({ // initialize the Plugin rules: { fname: { required: true, lettersonly: true, }, lname: { required: true, lettersonly: true, }, nicnumber: { // other rules, selectnic: true // <- declare the rule someplace! } }, messages: { fname: { required:"Please enter your first name", lettersonly: "Login format not valid", }, lname: { required:"Please enter your last name", lettersonly: "Login format not valid", }, }, submitHandler: function (form) { // for demo alert('valid form submitted'); // for demo return false; // for demo } }); });
Sparky.. 45
下面的进展编辑概述了三个不同的问题.
1)你错过了逗号selectnic
和之间的逗号function(
.
此外,使用时请尝试使用此格式regex
...
jQuery.validator.addMethod("selectnic", function(value, element){ if (/^[0-9]{9}[vVxX]$/.test(value)) { return false; // FAIL validation when REGEX matches } else { return true; // PASS validation otherwise }; }, "wrong nic number");
编辑:这个答案假定你的原始regex
和逻辑是正确的.false
当regex
匹配时,您的逻辑将返回. false
表示验证失败,您将看到错误消息.
2)编辑2:
创建新方法后,您还必须使用它们.我没有看到selectnic
代码中任何地方使用的规则/方法.
示例:
rules: { myFieldName: { // other rules, selectnic: true // <- declare the rule someplace! } }
3)编辑3:
最后,OP的原始true/false
逻辑是倒退的.他希望在正则表达式匹配时进行验证......因此,需要return true
.
if (/^[0-9]{9}[vVxX]$/.test(value)) { return true; // PASS validation when REGEX matches } else { return false; // FAIL validation };
演示:http: //jsfiddle.net/DzvNr/