как получить и отобразить имя пользователя в другом поле формы, когда пользователь выбирает имя из выпадающего списка в yii2? - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу отобразить имя пользователя лектора в другой форме ввода текста, когда пользователь выбирает имя лектора в раскрывающемся списке выше. this is my form

это мой код имени выпадающего списка

<?= $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 из базы данных.

1 Ответ

0 голосов
/ 09 ноября 2018

Поскольку вы используете раскрывающийся список, вам необходимо привязать событие 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 и использовать опцию события 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());
         }); }',
    ]
]);
...