带有Html标签的Yii2 Active Form自定义消息

时间:2015-11-29 15:45:47

标签: jquery yii2 message active-form

如何使用Html标签创建Yii2 Active Form自定义消息? 我通过jQuery.activeForm更改了此消息。

当前消息: enter image description here 所需消息 enter image description here

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

操作顺序:

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

    $("#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>']);
                    }
            });
        }
    });
    
  6. 在视图文件中:

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

1 个答案:

答案 0 :(得分:2)

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

在您的活动表单模型中

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是由-分隔的modelname-fieldname(全部小写) 在您的情况下,应该通过id ='myform-email'并使用此引用设置正确的属性(查看广告代码以查找正确的属性)

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

我希望这很有用