2016-09-24 65 views
0

我试图在香菜中实现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;[email protected]&quot;,&quot;[email protected]&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验证所示。

这就是显示 - 当电子邮件地址是

密码字段是必需的:值。

而且我想展示 -

当电子邮件地址是[email protected]密码字段是必需的。

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

+0

你可以简单地将错误显示为'当电子邮件地址为'时需要输入密码字段'并附上输入的值,我猜你会收到你的电子邮件 –

+0

@MehravishTemkar如何在自定义验证器中完成?我可以在自定义验证器中指定静态消息,但不能指定变量。我有一个选项可以在每次验证失败时将其替换掉,但是在这个问题中我再次遇到了问题,我没有得到自定义验证中验证失败的字段。 (可能有多个字段使用此验证) – Anik

+0

tbh我从来没有使用香菜对不起.. idk为什么你downvoted,他们应该至少指定的原因..我希望你很快得到解决方案..会让你知道,如果我得到什么.. –

回答

0

我想通了它是如何做到的。我需要返回与第一个参数作为我需要显示自定义消息jQuery的承诺 -

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(':值',fieldValue));

P.S. - 代码是从问题编辑,因为我需要它更精致。