ParsleyJS自定义数学验证器

时间:2018-08-19 10:26:28

标签: parsley.js

我已经成功地将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”,依此类推。

希望有人可以帮助我。

1 个答案:

答案 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'
       }
   });

为了完成这项工作,我们必须首先获取需求的值。这就是所缺少的。