荷兰芹自定义验证程序不会在动态生成的字段上触发(通过Ajax调用)

时间:2019-08-07 09:54:12

标签: parsley.js

创建了一个自定义验证器,并将其初始化在使用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: 'التاريخ غير صالح'
    }
});

2 个答案:

答案 0 :(得分:0)

您可以摧毁欧芹

$('form').parsley().destroy();

然后在ajax完成后重新初始化欧芹

$('form').parsley();

答案 1 :(得分:0)

在大多数情况下,Parsley将自动检测动态添加的输入,尤其是在验证表单时。

如果输入是动态添加的,并且具有在验证整个表单之前需要激活的特定触发器,那么您将需要初始化它们。最简单的可能是$('form').parsley().refresh()

相关问题