Я довольно новичок в Yii2 и имею следующую неприятную проблему.
Я создал две формы на одной странице, например
<?php $form = ActiveForm::begin([ // make sure you set the id of the form 'id' => 'create', 'action' => $action, 'options' => ['enctype' => 'multipart/form-data'] ]); ?> <?php $form = ActiveForm::begin([ // make sure you set the id of the form 'id' => 'update', 'action' => $action, 'options' => ['enctype' => 'multipart/form-data'] ]); ?>
Я использую ту же модель для обоих полей формы, как
<?= $form->field($action_model, 'action_name',[ 'addon' => ['prepend' => ['content'=>$action_model->getAttributeLabel('action_mobile')]] ])->widget(Typeahead::classname(), [ 'options' => ['placeholder' => $action_model->getAttributeLabel('action_placeholder')], 'pluginOptions' => ['highlight'=>true], 'dataset' => [ [ 'local' => Json::encode( $totalLookUp['action_lookUp'] ), 'limit' => 10 ] ] ])->label(false); ?>
И вот проблема. В этом случае у меня есть две формы с одинаковой областью полей с одинаковыми именами и одним и тем же идентификатором. Что наверняка будет недействительным для W3C. Другая проблема, которая воодушевляет тот факт, что клиентская сторона предвидит проверку JavaScript для обеих форм, отлично работает. Виджет типа выглядит только для первого набора полей, так как он bindid по id.
Если я пытаюсь переопределить идентификатор элементов, задав его по виджетам, например
<?= $form->field($action_model, 'action_name',[ 'addon' => ['prepend' => ['content'=>$action_model->getAttributeLabel('action_mobile')]] ])->widget(Typeahead::classname(), [ 'options' => ['id'=> $form_id.'_action_name', 'placeholder' => $action_model->getAttributeLabel('action_placeholder')], 'pluginOptions' => ['highlight'=>true], 'dataset' => [ [ 'local' => Json::encode( $totalLookUp['action_lookUp'] ), 'limit' => 10 ] ] ])->label(false); ?>
Typeahead работает отлично, но в этом случае проверка не выполняется, я имею в виду, что она просто перестает работать.
Таким образом, квестуион, как сделать возможным скорректировать скрипт проверки и использовать уникальные идентификаторы формы.
Из документов :
Если вы установите пользовательский
id
для элемента ввода, вам может потребоваться соответствующим образом настроить$selectors
.
Для вашего случая:
$form->field($action_model, 'action_name', [ 'selectors' => ['input' => '#'.$form_id.'_action_name'], 'addon' => ...