这个问题是由Github上的“ jackrugile”提出的,但是我无法找到答案。我在这里重新发布,因为存在完全相同的问题:
当使用链接到其他字段(等于,大于,小于,之前日期,之后日期等)的验证约束时,在一个字段上触发验证调用的任何内容都应在另一字段上自动调用。这仅适用于提交以外的触发器(focusin,focusout,keydown,keyup等)
例如,如果我有一个名为“ Small Number”的字段和一个名为“ Large Number”的字段,我会将data-greaterthan属性添加到“ Large Number”输入中以确保它更大。然后,我按如下所示填写字段:
Small Number: 12
Large Number: 7
该验证显然失败了,并且在“ Large Number”字段上显示了一个错误。然后,要解决此错误,而不是使“大数字”大于12,而是使“小数字”小于7。现在,表单的状态为:
Small Number: 5
Large Number: 7
但是,即使这应该立即通过,因为它在验证规则之内,也不能消除错误,因为在更改“小数字”之后,没有再次检查“大数字”。
最好的解决方案是什么?
据我所知,在Parsley 2.1(当前版本)中,不支持此功能。但是,我们可以通过侦听触发的欧芹事件来添加功能。我认为您可以通过多种方法来解决此问题。我选择在字段初始化上执行此操作。初始化一个字段时,如果它具有依赖于另一个字段的验证器,则向该字段添加一个侦听器,这样,当该字段更改时,我将重新执行验证。这是一个例子:
/**
* 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事件上添加了侦听器,则必须在初始化欧芹表单之前添加代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句