当您使用下拉列表时,您需要为下拉列表绑定change 事件,以将下拉列表中的值插入到输入文本中。并确保您为LecturerName 插入LecUsername,您需要将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());
}); }',
]
]);