2

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

当前消息: 所需消息在此处输入图像描述 在此处输入图像描述

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

操作顺序:

  1. 在浏览器上:通过 jQuery 验证电子邮件
  2. 在服务器上:验证电子邮件、验证电子邮件是否存在、是否存在不良用户列表等等...... - 这些功能正在运行ajax/is-email-busy。我通过 Ajax 查询来完成
  3. 在浏览器上:如果该邮箱已经注册并且是好用户的邮箱,则更改消息
  4. 在浏览器上:当用户单击消息中的链接时,将弹出登录表单

    $("#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');
4

1 回答 1

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 验证代码中显示。

我希望这是有用的

于 2015-11-29T16:59:46.287 回答