我为jquery验证插件编写了一个额外的方法,用于检查给定值是否满足验证过程中定义的长度要求。
所以方法如下:
jQuery.validator.addMethod("exactLength", function(value, element, param){
var len = value.length;
if ($.isArray(param)){
if (param.indexOf(len) !== -1){
return true;
} else {
return false;
}
} else {
if (param != len){
return false;
} else {
return true;
}
}
}, jQuery.format("Value must have {0} characters"));
它可以工作,但唯一的问题是发送给用户的消息不符合我的需要。原因是因为一个字段可能有超过1个有效长度。
银行代码可以包含8位或11位数字。 所以,如果我定义下面的选项,我希望在出现错误时输出以下内容: “请注意,该值必须为8或11位数。”
{
"options":{
"rules": {
"inputx": {
"required": true,
"exactLength": [8,11]
}
}
}
}
但我想要更灵活,因为我可以将2个值定义为有效长度,“请,值必须为8,11,xxx或23位” 或者我可以在基本字段中输入必须只有1个特定长度“请,值必须有8位”
那么,在方法内部是否可以告诉想要传递给消息?
根据Arun P Johny回答添加了完整的解决方案
jQuery.validator.addMethod("exactLength", function(value, element, param){
var len = value.length;
if ($.isArray(param)){
if (param.indexOf(len) !== -1){
return true;
} else {
return false;
}
} else {
if (param != len){
return false;
} else {
return true;
}
}
}, function(param, element){
var str = "";
if ($.isArray(param)){
var paramLen = param.length,
lastParamValue = param[ paramLen - 1];
if (paramLen == 2){
str = param[0];
} else {
for(var i = 0; i< paramLen - 1; i++){
if (i == paramLen - 1){
str += ',' + param[i];
} else {
if (i == 0)
str += param[0];
else
str += ',' + param[i];
}
}
}
return jQuery.format("Value must have {0} or {1} characters", str, lastParamValue );
} else {
return jQuery.format("Value must have {0} characters", param )
}
});
答案 0 :(得分:0)
消息选项可以是一个功能
jQuery.validator.addMethod("exactLength", function (value, element, param) {
var len = value.length;
if ($.isArray(param)) {
if (param.indexOf(len) !== -1) {
return true;
} else {
return false;
}
} else {
if (param != len) {
return false;
} else {
return true;
}
}
}, function (param, element) {
//you can customize the string generation here, params refers to the array passed to the rule
return "Value must have " + param.join(',') + " characters"
});
演示:Fiddle