0

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

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

<?= $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 来自数据库。

4

1 回答 1

1

当您使用下拉菜单时,您需要为下拉菜单绑定change事件以将下拉菜单中的值插入到输入文本中。并确保您要插入的LecUsernameLecturerName您需要将其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());
         }); }',
    ]
]);
于 2018-11-09T13:08:49.297 回答