如何在锚标记的标题中放置yii2格式错误
这是我的代码
$form = ActiveForm::begin([
'id' => 'login-form',
'options' => ['class' => 'form-horizontal'],
'fieldConfig' => [
'template' => '
{label}
<div class="error-block">
<a href="#" title="{error}">error</a>
</div>
{input}
',
'errorOptions' => ['tag' => null]
],
]);
我要在YII2的锚标签标题中添加错误
<a href="#" title="{error}">error</a>
答案 0 :(得分:0)
您需要在锚标签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
:正在验证的属性。有关此参数的结构,请参考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
属性中看到错误消息。