我正在尝试在欧芹中实现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="["email","anik@example.com","dan@example.com"]" 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。
答案 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。 - 代码是从问题中进行位编辑的,因为我需要更精确。