Вам нужно отобразить текст ошибки внутри атрибута якорных тегов title
, и использование опции template
не поможет вам достичь этого автоматически.
Несколько вещей в вашем подходе.
Вы указываете "tag"=>null
в errorOptions
, который не создает html по умолчанию <p class="help-block help-block-error"></p>
.
Даже если вы указываете тег как div
или span
, даже в этом случае он будет нарушать HTML, поскольку заголовок атрибута имеет двойные кавычки <a href="#" title="{error}">error</a>
, а созданный тег также будет иметь двойные кавычки <div class="help-block help-block-error"></div>
.
Тогда, есливы изменяете <a href="#" title="{error}">error</a>
на <a href="#" title=\'{error}\'>error</a>
, чтобы исправить неисправный HTML
javascript не сможет обнаружить элемент.
Итак, событие afterValidateAttribute
придет к вамспасение, которое запускается после проверки всей формы и каждого атрибута.
Подпись обработчика события должна быть:
function (event, attribute, messages)
где
event
: объект события.
attribute
: атрибутe проверяется.Пожалуйста, обратитесь к attributeDefaults
для структуры этого параметра.
messages
: массив, в который вы можете добавить дополнительные сообщения об ошибках проверки для указанного атрибута.
Теперь измените template
в fieldConfig
на следующее и удалите {error}
из шаблона и errorOptions
, так как это не нужно, и просто сохраните свою ошибкуЭлемент внутри шаблона.
'fieldConfig' => [
'template' => '
{label}
<div class="error-block">
<a href="#" title="">error</a>
</div>
{input}
',
],
Теперь добавьте нижеприведенный javascript вверху вашего представления, где вы отображаете форму.
$js = <<< JS
$("#login-form").on(
'afterValidateAttribute',
function (event,attribute,messages) {
let input=attribute.input;
$(input).siblings('.error-block').find('a').attr('title',messages.join(','));
}
);
JS;
$this->registerJs($js, \yii\web\View::POS_READY);
Теперь, если вы focus
изили нажмите кнопку «Отправить», и вы увидите сообщения об ошибках, которые заполняются в атрибуте title
тега a
.