带有 Html 标签的 Yii2 活动表单自定义消息

Yii2 Active Form custom message with Html tags

如何使用 Html 标签创建 Yii2 活动表单自定义消息? 我通过 jQuery.activeForm.

更改此消息

当前消息: 想要的消息

这是我正在尝试的 javascript 代码: myform.js - 包含在 AppAssets.php.

运算顺序:

  1. 在浏览器上: 通过 jQuery
  2. 验证电子邮件
  3. 在服务器上: 验证电子邮件、验证电子邮件是否存在、是否存在不良用户列表等... - 这些功能位于 ajax/is-email-busy 操作中。我通过 Ajax 查询
  4. 在浏览器上:如果此邮箱已经注册并且是好用户的邮箱,请更改消息
  5. 在浏览器上: 当用户点击消息中的 link 时,将出现用于登录的弹出窗体

    $("#form-ad").on("afterValidateAttribute", function(event, attribute, messages) {
        var hasError = messages.length !== 0;
        var field = $(attribute.container);
        var input = field.find(attribute.input);
    
        if(attribute.name == 'email' && !hasError) {
    
            var form_data = new FormData();
            form_data.append('email', input.val());
    
            $.ajax({
                    url: 'ajax/is-email-busy',
                    dataType: 'json',
                    cache: false,
                    contentType: false,
                    processData: false,
                    data: form_data,                         
                    type: 'post',
                    success: function(data) {
                        console.log(data);
                        jQuery('#form-ad')
                                .yiiActiveForm(
                                'updateAttribute',
                                'adform-email',
                                ['This email is busy. If it\'s your email <a href="#">click here</a>']);
                    }
            });
        }
    });
    

在视图文件中:

echo $form->field($model, 'email')->input('email');

你可以在声明规则时指定消息属性来自定义规则的错误消息,如下所示,

在您的活动表单模型中

public function rules()
{
   return [
       ['email', 'required', 
         'message' => 'This email is busy. If it\'s your email 
             <a href="#">click here</a>'
      ],
      ['email', 'email'],
   ];
}

否则你不想在 Yii 中添加自定义验证规则而你想使用 jquery 你应该参考正确的字段 id 通常字段 id 是模型名称-字段名称(全部小写),由 - 分隔 在您的情况下,应该通过 id='myform-email' 并使用此参考设置正确的属性(查看渲染代码以找到正确的属性)

查看 Yii2 呈现的代码,通过添加包含与消息相关的文本的 div 来管理错误消息,并在函数中添加 hidden/display 提供验证结果。我建议你同样的行为。当您验证失败时,将兄弟添加到带有您的消息和显示的输入中。或者您可以在表单中准备此 div,然后显示在您的 jquery 验证码中。

希望有用