当单个字段在没有无限递归的情况下发出成功事件时,我无法在 Parsley 中触发验证
I'm unable to trigger validations in Parsley when a single field emits a success event without infinite recursion
我在一个表单中有许多不同的部分,每个部分的输入必须等于第一个输入(在它自己的部分)才能验证表单。
验证工作正常,唯一的问题是 UI 在用户尝试验证某个部分中包含不正确数字的情况下,在该部分的其余部分显示错误。在这种情况下,该部分中的每个输入都会显示错误。这很棒。但是,当用户更改其中一个字段中的数字时,总数现在是正确的,parsley 只会清除该特定字段中的错误。
下面是运行良好的代码,只是没有清除错误:
window.ParsleyValidator
.addValidator('sumTotal', function (value, group) {
// get total enrollment number
var totalInput = $('#enrollment-group').find('[data-parsley-sum-total="all"]')
var totalEnrollment = parseInt(totalInput.val())
// sum up input values for the section
var sectionSum = 0;
$('#enrollment-group').find('[data-parsley-sum-total="' + group + '"]').each(function(){
if ($(this).val()) sectionSum += parseInt($(this).val());
})
// if no inputs, don't consider the section
if (sectionSum === 0) return true
return totalEnrollment === sectionSum;
}, 32)
.addMessage('en', 'sumTotal', 'The total sum for all %s fields must equal the total enrollment above: ' + $('#enrollment-group').find('[data-parsley-sum-total="all"]').val());
// exclude the 'total enrollment' input from the sum validation
$('form').parsley({ excluded: '[data-parsley-sum-total="all"]' });
下面是我试图清除错误但最终以无限递归结束的代码示例:
$('form').parsley().subscribe('parsley:field:success', function(input){
$.each($('[data-parsley-sum-total]'), function(i, value){
if ($(value).hasClass('parsley-error')){
$(value).parsley().validate()
}
})
});
那么,如何在该部分有效后清除该部分输入的所有错误?
这是在 django 管理模板中,所以我必须在 parsley.js 加载后添加我的自定义验证器。在此先感谢您的帮助。
好吧,经过一番折腾后我弄明白了,这是给遇到类似问题的人的:
window.ParsleyValidator
.addValidator('sumTotal', function (value, group) {
// get total enrollment number
var totalInput = $('#enrollment-group').find('[data-parsley-sum-total="all"]')
var totalEnrollment = parseInt(totalInput.val())
// sum up input values for the section
var sectionSum = 0;
$('#enrollment-group').find('[data-parsley-sum-total="' + group + '"]').each(function(){
if ($(this).val()) sectionSum += parseInt($(this).val());
})
// if no inputs, don't consider the section
if (sectionSum === 0) return true
return totalEnrollment === sectionSum;
}, 32)
.addMessage('en', 'sumTotal', 'The total sum for all %s fields must equal the total enrollment above: ' + $('#enrollment-group').find('[data-parsley-sum-total="all"]').val());
// exclude the 'total enrollment' input from the sum validation
$('form').parsley({ excluded: '[data-parsley-sum-total="all"]' });
// clear other errors in section if one field emits success event
$('form').parsley().subscribe('parsley:field:success', function(input){
$.each($('[data-parsley-sum-total]'), function(i, value){
if ($(value).attr('data-parsley-sum-total') == input.options.sumTotal){
window.ParsleyUI.removeError($(value).parsley(), 'sumTotal')
$(value).removeClass('parsley-error')
$(value).addClass('parsley-success')
}
})
})
我在一个表单中有许多不同的部分,每个部分的输入必须等于第一个输入(在它自己的部分)才能验证表单。
验证工作正常,唯一的问题是 UI 在用户尝试验证某个部分中包含不正确数字的情况下,在该部分的其余部分显示错误。在这种情况下,该部分中的每个输入都会显示错误。这很棒。但是,当用户更改其中一个字段中的数字时,总数现在是正确的,parsley 只会清除该特定字段中的错误。
下面是运行良好的代码,只是没有清除错误:
window.ParsleyValidator
.addValidator('sumTotal', function (value, group) {
// get total enrollment number
var totalInput = $('#enrollment-group').find('[data-parsley-sum-total="all"]')
var totalEnrollment = parseInt(totalInput.val())
// sum up input values for the section
var sectionSum = 0;
$('#enrollment-group').find('[data-parsley-sum-total="' + group + '"]').each(function(){
if ($(this).val()) sectionSum += parseInt($(this).val());
})
// if no inputs, don't consider the section
if (sectionSum === 0) return true
return totalEnrollment === sectionSum;
}, 32)
.addMessage('en', 'sumTotal', 'The total sum for all %s fields must equal the total enrollment above: ' + $('#enrollment-group').find('[data-parsley-sum-total="all"]').val());
// exclude the 'total enrollment' input from the sum validation
$('form').parsley({ excluded: '[data-parsley-sum-total="all"]' });
下面是我试图清除错误但最终以无限递归结束的代码示例:
$('form').parsley().subscribe('parsley:field:success', function(input){
$.each($('[data-parsley-sum-total]'), function(i, value){
if ($(value).hasClass('parsley-error')){
$(value).parsley().validate()
}
})
});
那么,如何在该部分有效后清除该部分输入的所有错误?
这是在 django 管理模板中,所以我必须在 parsley.js 加载后添加我的自定义验证器。在此先感谢您的帮助。
好吧,经过一番折腾后我弄明白了,这是给遇到类似问题的人的:
window.ParsleyValidator
.addValidator('sumTotal', function (value, group) {
// get total enrollment number
var totalInput = $('#enrollment-group').find('[data-parsley-sum-total="all"]')
var totalEnrollment = parseInt(totalInput.val())
// sum up input values for the section
var sectionSum = 0;
$('#enrollment-group').find('[data-parsley-sum-total="' + group + '"]').each(function(){
if ($(this).val()) sectionSum += parseInt($(this).val());
})
// if no inputs, don't consider the section
if (sectionSum === 0) return true
return totalEnrollment === sectionSum;
}, 32)
.addMessage('en', 'sumTotal', 'The total sum for all %s fields must equal the total enrollment above: ' + $('#enrollment-group').find('[data-parsley-sum-total="all"]').val());
// exclude the 'total enrollment' input from the sum validation
$('form').parsley({ excluded: '[data-parsley-sum-total="all"]' });
// clear other errors in section if one field emits success event
$('form').parsley().subscribe('parsley:field:success', function(input){
$.each($('[data-parsley-sum-total]'), function(i, value){
if ($(value).attr('data-parsley-sum-total') == input.options.sumTotal){
window.ParsleyUI.removeError($(value).parsley(), 'sumTotal')
$(value).removeClass('parsley-error')
$(value).addClass('parsley-success')
}
})
})