验证Parsley.js中的链接字段

时间:2014-12-05 21:04:42

标签: parsley.js

这个问题是由" jackrugile"在Github,但如果有的话,我无法找到答案。我在这里重新发布是因为有完全相同的问题:

当使用链接到其他字段(等于,大于,小于,日期之前,日期之后等)的验证约束时,无论是什么触发一个字段上的验证调用都应该自动在另一个字段上调用。这仅适用于提交以外的触发器(focusin,focusout,keydown,keyup等)

例如,如果我有一个名为" Small Number"和一个名为" Large Number"的字段,我会将data-greaterthan属性添加到" Large Number"输入以确保它更大。然后我填写如下字段:

Small Number: 12
Large Number: 7

此验证显然失败,错误显示在"大号"领域。然后,要修复此错误,而不是使"大数字"大于12,我制作"小数字"表格的状态现在是:

Small Number: 5
Large Number: 7

但是,即使这应该立即通过,因为它在验证规则范围内,它也不会删除错误,因为没有检查"大数字"在改变"小号"。

后再次

最佳解决方案是什么?

1 个答案:

答案 0 :(得分:1)

据我所知,在Parsley 2.1(当前版本)中,这不受支持。但是,我们可以通过监听被触发的parsley events来添加功能。我认为有很多方法可以解决这个问题。我选择在字段初始化时执行此操作。当一个字段被初始化时,如果它有一个依赖于另一个字段的验证器,我会向该字段添加一个监听器,这样当该字段改变时,我会重新执行我的验证。这是一个例子:

/**
  * For fields that have a comparison to another field,
  * setup a listener so that when one field changes, both
  * fields re-validate.
  */
 $.listen('parsley:field:init', function(e) {
   var comparisonFields = ['gte', 'gt', 'lte', 'lt'];
   for (var i = 0; i < comparisonFields.length; i++) {
     if (e.OptionsFactory.fieldOptions[comparisonFields[i]]) {
        $(e.OptionsFactory.fieldOptions[comparisonFields[i]]).on(e.OptionsFactory.staticOptions.trigger, function() {
          $(e.$element).parsley().validate();
       })
     }
   }
 });

请注意,如果在任何init事件上添加侦听器,则必须在初始化parsley表单之前提供代码。