如何应用条件错误消息?

时间:2016-09-24 08:06:40

标签: javascript laravel parsley.js

我正在尝试在欧芹中实现laravel的required_if验证,我能够成功应用它,但主要问题是在显示错误消息时出现。我添加了以下自定义验证器 -

window.Parsley.addValidator('lpyRequiredIf', {
    validateString(value, requirement) {
        const fieldValue = document.getElementsByName(requirement[0])[0].value;
        if (requirement.indexOf(fieldValue) > -1) {
            return value !== '';
        }
        return true;
    },
});

我的输入看起来像这样 -

<input class="form-control form-control-solid placeholder-no-fix" type="password" autocomplete="off" placeholder="Password" name="password" data-parsley-lpy-required-if="[&quot;email&quot;,&quot;anik@example.com&quot;,&quot;dan@example.com&quot;]" data-parsley-lpy-required-if-message="The password field is required when email address is :value." data-parsley-validate-if-empty="" data-parsley-whitespace="trim" data-parsley-lpy-custom-message="The password field is required when email address is :value.">

现在我想要显示与laravel验证中显示的完全相同的消息。

这就是显示的内容 -

  

如果电子邮件地址为:value。

,则需要输入密码字段

我想展示 -

  

如果电子邮件地址为anik@example.com,则需要输入密码字段。

任何人都可以建议我如何实现这一目标吗?基本上我想用验证失败时输入的电子邮件地址替换:value。

1 个答案:

答案 0 :(得分:0)

我弄清楚它是如何完成的。我需要以第一个参数作为自定义消息返回jquery promise,我需要显示它 -

window.Parsley.addValidator('lpyRequiredIf', {
    validateString(value, ...requirement) {
        let valid = true;
        const formElement = $(requirement[requirement.length - 1].parent.$element);
        const fieldToCheck = formElement.find(`[name= ${requirement[0]} ]`);
        if (fieldToCheck.length !== 0) {
            const fieldValue = fieldToCheck.val();
            const deferred = new $.Deferred();
            const baseErrorMessage = requirement[requirement.length - 1]
                                    .domOptions.lpyRequiredIfMessage;
            if (requirement.indexOf(fieldValue) > -1 && value === '') {
                deferred.reject(baseErrorMessage.replace(':value', fieldValue));
            } else {
                deferred.resolve();
            }
            valid = deferred.promise();
        }
        return valid;
    },
});

这里我将返回自定义错误消息 -

  

deferred.reject(baseErrorMessage.replace(':value',fieldValue));

P.S。 - 代码是从问题中进行位编辑的,因为我需要更精确。