创建了一个自定义验证器,并将其初始化在使用ajax调用动态生成的模板中。 问题是自定义验证程序未在生成的字段中触发。 但是,如果直接在html dom中进行初始化工作正常。 有人知道吗??
下面显示的是自定义验证器:
var iffRecursion = false;
//Validation for date_start
window.Parsley.addValidator('date_start', {
requirementType: 'string',
validateString: function (value, requirement, component) {
console.log('date_start');
if (!value) {
return true;
}
var format = $(component.element).data('format');
var date = moment(value, format, true);
var endDateElement = $(component.element).closest('.row').find('.' + requirement);
var endDate = moment(endDateElement.val(), format, true);
if (!date.isValid()) {
return false;
}
if (endDateElement.val() != '' && endDate.isValid()) {
if (iffRecursion) {
iffRecursion = false;
} else {
iffRecursion = true;
$(endDateElement).parsley().validate();
}
return date.isSameOrBefore(endDate);
} else {
return true;
}
},
priority: 256,
messages: {
en: 'The date is greater than End',
ar: 'التاريخ غير صالح'
}
});
//Validation for date_end
window.Parsley.addValidator('date_end', {
requirementType: 'string',
validateString: function (value, requirement, component) {
console.log('date_end');
if (!value) {
return true;
}
var format = $(component.element).data('format');
var date = moment(value, format, true);
var startDateElement = $(component.element).closest('.row').find('.' + requirement);
var startDate = moment(startDateElement.val(), format, true);
if (!date.isValid()) {
return false;
}
if (startDateElement.val() != '' && startDate.isValid()) {
if (iffRecursion) {
iffRecursion = false;
} else {
iffRecursion = true;
$(startDateElement).parsley().validate();
}
return date.isSameOrAfter(startDate);
} else {
return true;
}
},
priority: 256,
messages: {
en: 'The date is lesser than Start',
ar: 'التاريخ غير صالح'
}
});
答案 0 :(得分:0)
您可以摧毁欧芹
$('form').parsley().destroy();
然后在ajax完成后重新初始化欧芹
$('form').parsley();
答案 1 :(得分:0)
在大多数情况下,Parsley
将自动检测动态添加的输入,尤其是在验证表单时。
如果输入是动态添加的,并且具有在验证整个表单之前需要激活的特定触发器,那么您将需要初始化它们。最简单的可能是$('form').parsley().refresh()