如何在锚标记的标题中放置yii2形式错误

时间:2018-12-04 06:53:52

标签: php yii yii2 yii2-advanced-app yii2-validation

如何在锚标记的标题中放置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>

1 个答案:

答案 0 :(得分:0)

您需要在锚标签title属性内显示错误文本,并且使用template选项不会帮助您自动实现它。

您需要采取的一些措施。

  • 您正在"tag"=>null下指定errorOptions,这将不会创建默认的HTML <p class="help-block help-block-error"></p>

  • 即使您将标签指定为divspan,即使该标签将破坏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属性中看到错误消息。