Я хочу отобразить имя пользователя лектора в другой форме ввода текста, когда пользователь выбирает имя лектора в раскрывающемся списке выше.
это мой код для выпадающего списка имени лектора
<?= $form->field($model, 'LecturerName')->dropDownList(
ArrayHelper::map(User::findAll(['category' => 'lecturer']),'fullname','fullname'),
['prompt'=>'Select Lecturer']
) ?>
это мой код для имени пользователя лектора
<?= $form->field($model, 'LecUsername')->textInput(['maxlength' => true]); ?>
Я хочу получить и отобразить имя LecUser на основе выбранного раскрывающегося списка выше. имя пользователя LecUser из базы данных.
Поскольку вы используете раскрывающийся список, вам необходимо связать 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);
Лучший способ для выпадающих — использовать библиотеку Картик-v \ Выбор2 и использовать событие 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());
}); }',
]
]);
Других решений пока нет …