我已经成功地将ParsleyJS的某些部分适应了我的表单需求。现在,我需要制作一些自定义的数学验证器,但是我正在努力弄清为什么我的验证器不起作用。
我需要完成的工作:
输入1:x
输入2:与x的差异不能超过10
示例表格:
<form id="demo-form" data-parsley-validate="">
<label for="input1">Input 1</label>
<input type="text" class="form-control" id="input1" name="input1" required>
<label for="input2">Input 2</label>
<input type="text" class="form-control" id="input2" name="input2" required data-parsley-not-more-than="input1" data-parsley-trigger="keyup" data-parsley-validation-threshold="0">
<input type="submit" class="btn btn-default pull-right">
</form>
在自定义验证程序演示示例中,我认为可以像这样轻松解决:
window.Parsley.addValidator('notMoreThan', {
validateNumber: function(value, requirement) {
return (value - requirement) <= 10;
},
requirementType: 'integer',
messages: {
en: 'This value can not be more than 10 different from %s'
}
});
但是。.未捕获的要求不是整数:“ input1”
好。然后我们将其更改为字符串。
window.Parsley.addValidator('notMoreThan', {
validateNumber: function(value, requirement) {
return (requirement - value) <= 10;
},
requirementType: 'string',
messages: {
en: 'This value can not be more than 10 different from %s'
}
});
但这总是返回false,无论输入是什么,验证都会失败。
然后,我查看src / extra目录中的Extras(大于,小于或等于),并且这样做:
// gt, gte, lt, lte, notequalto extra validators
var parseRequirement = function (requirement) {
if (isNaN(+requirement))
return parseFloat(jQuery(requirement).val());
else
return +requirement;
};
// Greater than or equal to validator
window.Parsley.addValidator('gte', {
validateString: function (value, requirement) {
return parseFloat(value) >= parseRequirement(requirement);
},
priority: 32
});
因此,以我有限的javascript知识,我猜他们会“解释”需求值,以返回正确的字符串(如果不是数字)。
所以,我尝试相同的方法。
// gt, gte, lt, lte, notequalto extra validators
var parseRequirement = function (requirement) {
if (isNaN(+requirement))
return parseFloat(jQuery(requirement).val());
else
return +requirement;
};
// my not more than 10 different validator
window.Parsley.addValidator('notMoreThan', {
validateString: function (value, requirement) {
return ( parseFloat(value) - parseRequirement(requirement) ) <= 10;
},
priority: 32
});
但这也总是返回false。
我完全不知所措。可能是我缺乏JavaScript技能。.希望这个答案不会因此而被贬低。我正在努力学习。
最后,我需要一个解决方案,以根据字段通过简单的数学验证来制作自定义验证器。 “字段B与字段A的差不能超过X”“字段D与((字段C除以x)减去y)的差不能超过f”,依此类推。
希望有人可以帮助我。
答案 0 :(得分:0)
我找到了解决方案,希望该解决方案可以帮助面临类似问题的人们,因为在这方面缺少新手的文档。
window.Parsley.addValidator('notMoreThan', {
validateNumber: function(value, requirement) {
// requirement is passing the id of the input 1 so ve have to obtain the value of it
var requirement_value = $('#'+requirement).val() ;
return value - requirement_value <= 10 ;
},
requirementType: 'string',
messages: {
en: 'This value can not be more than 10 different from %s'
}
});
为了完成这项工作,我们必须首先获取需求的值。这就是所缺少的。