2015-11-29 4 views
2

Как создать пользовательское сообщение YY2 Active Form с использованием тегов Html? Я меняю это сообщение через jQuery.activeForm.Yii2 Специальное сообщение для активной формы с тегами Html

Текущее сообщение: enter image description here Желаемого сообщение enter image description here

Вот 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'); 
+0

пожалуйста показать ecode (вид и соответствующую модель) для тха текущего сообщения/поле/формы – scaisEdge

+0

решенной. Заменен 'jQuery ('# form-ad'). YiiActiveForm ('updateAttribute' ...' с 'jQuery ('# adform-email'). Next(). Append (data.message);'. Это сообщение, которое я принимаю от ответа Ajax – Abylay

ответ

2

Вы можете настроить сообщение об ошибке правило, указав свойство сообщения при объявлении правила, как и в следующем,

в активном виде модели

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 = 'myform-email' и с этой ссылкой установите соответствующий атрибут (посмотрите в коде renderd для поиска правильного атрибута)

Рассматривая код, отображаемый Yii2, управляющее сообщение об ошибке управляется добавлением div, содержащего текст, связанный с сообщением, и функция скрытия/отображения в функции предлагает результат проверки. Я предлагаю вам такое же поведение. Когда вы завершаете проверку, добавьте на вход со своим сообщением и дисплеем. Или вы можете подготовить этот div в своей форме, а затем отобразить в своем коде проверки jquery.

Я надеюсь, что это полезно

+0

Я отредактировал вопрос. Это условие 'require' недостаточно в моем случае – Abylay

+0

, какое другое условие вам нужно? – scaisEdge

+0

Я добавил тип электронной почты формы проверки, если вам нужно больше комментариев с вашим требованием. – scaisEdge