当您使用下拉菜单时,您需要为下拉菜单绑定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并使用 eventpluginEvents选项来指定 event 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());
}); }',
]
]);