Поскольку вы используете раскрывающийся список, вам необходимо привязать событие change
для раскрывающегося списка, чтобы вставить значение из раскрывающегося списка во входной текст. И чтобы убедиться, что вы вставляете LecUsername
для LecturerName
, вам необходимо иметь LecUsername
в качестве значения для раскрывающегося списка, это означает, что в раскрывающихся данных должно быть поле username
в качестве индекса, в настоящее время вы используете fullname
в качестве индекса и значения, поэтому измените код в соответствии с именем поля, которое у вас есть для имени пользователя, я предполагаю, что для примера это username
.
ArrayHelper::map(User::findAll(['category' => 'lecturer']),'username','fullname')
так что ваш выпадающий код будет выглядеть как
<?= $form->field($model, 'LecturerName')->dropDownList(
ArrayHelper::map(User::findAll(['category' => 'lecturer']),'username','fullname'),
['prompt'=>'Select Lecturer']
) ?>
затем добавьте ниже в верхнюю часть вашего файла просмотра, где у вас есть форма
$ddId=Html::getInputId($model, 'LecturerName');
$inputId=Html::getInputId($model, 'LecUsername');
$js = <<< JS
$(document).ready(function(){
$("#{$ddId}").on('change',function(e){
$("#{$inputId}").val($(this).val());
});
});
JS;
$this->registerJs($js, \yii\web\View::POS_READY);
Лучший способ для раскрывающихся списков - использовать библиотеку Kartik-v \ select2 и использовать опцию события pluginEvents
, чтобы указать событие select2:select
, в этом случае ваш код должен выглядеть следующим образом.
// Usage with ActiveForm and model
echo $form->field($model, 'LecturerName')->widget(Select2::classname(), [
'data' => ArrayHelper::map(User::findAll(['category' => 'lecturer']),'username','fullname'),
'options' => ['placeholder' => 'Select Lecturer'],
'pluginOptions' => [
'allowClear' => true
],
'pluginEvents'=>[
"select2:select" => 'function() { $("#{$ddId}").on('change',function(e){
$("#{$inputId}").val($(this).val());
}); }',
]
]);