【问题标题】:how to get and display username in another form field when user select name from dropdownlist in yii2?当用户从 yii2 的下拉列表中选择名称时,如何在另一个表单字段中获取和显示用户名?
【发布时间】:2026-01-05 11:45:01
【问题描述】:

当用户在上面的下拉列表中选择讲师姓名时,我想在另一个文本输入字段表单中显示讲师用户名。

这是我的下拉列表讲师姓名的代码

<?= $form->field($model, 'LecturerName')->dropDownList(
        ArrayHelper::map(User::findAll(['category' => 'lecturer']),'fullname','fullname'),
        ['prompt'=>'Select Lecturer']
        ) ?>

这是我的讲师用户名代码

<?= $form->field($model, 'LecUsername')->textInput(['maxlength' => true]); ?>

我想根据上面选择的下拉列表获取并显示 LecUsername。 LecUsername 来自数据库。

【问题讨论】:

标签: php yii2 dropdown


【解决方案1】:

当您使用下拉列表时,您需要为下拉列表绑定change 事件,以将下拉列表中的值插入到输入文本中。并确保您为LecturerName 插入LecUsername,您需要将LecUsername 作为下拉列表的值,这意味着下拉数据应该有username 字段作为索引,目前您正在使用 fullname 作为索引和值,因此根据您为用户名拥有的字段名称更改代码,我假设它是 username 示例。

ArrayHelper::map(User::findAll(['category' =&gt; '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());
         }); }',
    ]
]);

【讨论】:

  • 我应该在这里放什么? = $form->field($model, 'LecUsername')->textInput(['maxlength' => true]); ?>
  • 这保持不变,您无需为LecUsername@queenhoney 更改任何内容
  • $ddId=Html::getInputId($model, 'LecturerName'); $inputId=Html::getInputId($model, 'LecUsername'); $js =
  • @beginnerQueen 是的,对不起,我错过了注册脚本$this-&gt;registerJs($js, \yii\web\View::POS_READY); 我更新了上面的答案,它现在应该可以工作了
  • 但如果我使用此代码:= $form->field($model, 'LecturerName')->dropDownList( ArrayHelper::map(User::findAll(['category' = > 'lecturer']),'username','fullname'), ['prompt'=>'Select Lecturer'] ) ?> 讲师姓名字段将保存用户名,LecUsername 也保存用户名。我想在讲师姓名字段中保存讲师姓名。
最近更新 更多