2014-12-05 62 views
2

Github上的“jackrugile”提问这个问题,但如果发现问题,我找不到答案。我在这里重新发布,因为具有完全相同的问题:验证Parsley.js中的链接字段

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

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

Small Number: 12 
Large Number: 7 

此验证明显失败,并在“大号”字段显示错误。然后,要解决的不是使“大量的”这个错误,大于12,我做了“少量多次”的小于7的形式的状态现在是:

Small Number: 5 
Large Number: 7 

然而,即使这应该立即通过,因为它在验证规则中,因为在更改“小号”后再次在“大号”上不执行检查,所以它不会删除错误。

这是最好的解决方案是什么?

回答

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(); 
     }) 
    } 
    } 
}); 

需要注意的是,如果你在任何初始化事件添加监听器,代码必须拿出你初始化香菜形式之前。

-1

此功能在Parsley zip文件中的extra验证中提供。

+0

这不回答这个问题。这个问题特别是关于双向约束,这个Parsley的额外功能目前似乎不支持。在他的问题中看到他的例子。 – Brad 2015-07-14 17:14:16