簡體   English   中英

如何將我從下拉列表中選擇的數據附加到yii2中的下一個輸入字段

[英]how will I append data I am selecting from a dropdown list to the next input field in yii2

我想從“課程”字段中選擇課程,然后將其顯示在“我的課程”字段中,然后將課程提交到數據庫。 或者如果有人可以幫助我,以便我的課程可以顯示一個復選框,而當我勾選該復選框時,它會出現在“課程”字段中

<?php $form = ActiveForm::begin(); ?>
<?=$form->field($model, 'student_id') ?>
<?=
$form->field($model, 'faculty_id')->dropDownList(
        ArrayHelper::map(Faculties::find()->asArray()->all(), 'faculty_id', 'faculty_name'), [
    'prompt' => 'Select Faculty',
    'onchange' => '$.post("' . Yii::$app->urlManager->createUrl('/departments/lists?id=') . '"+$(this).val(), function(data) {
                            $("select#registrations-department_id").html (data);
                        });'
        ]
);
?>
<?=
$form->field($model, 'department_id')->dropDownList(
        ArrayHelper::map(Departments::find()->asArray()->all(), 'department_id', 'department_name'), [
    'id' => 'registrations-department_id',
    'prompt' => 'Select Department',
    'onchange' => '$.post("' . Yii::$app->urlManager->createUrl('/courses/lists?id=') . '"+$(this).val(), function(data) {
                            $("select#registrations-course_id").html (data);
                        });'
]);
?>

<?=
$form->field($model, 'course_id')->dropDownList(
        ArrayHelper::map(Courses::find()->asArray()->all(), 'course_id', 'course_name'), [
    'id' => 'registrations-course_id',
    'prompt' => 'Select Course',
    'onchange' => '$.post("(selected:)."+$(this).val(), function(data){
                            $("#registrations-courses").append(data)
                        });'
]);
?>
<!--        <?//= $form->field($model, 'courses')->checkBoxList([]) ?> -->


<?=$form->field($model, 'courses') ?>
<?=$form->field($model, 'comment') ?>
<?=$form->field($model, 'status') ?>
<?=$form->field($model, 'created_at') ?>
<?=$form->field($model, 'updated_at') ?>

<div class="form-group">
    <?=Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>

編輯

這是我的控制器,我如何將課程保存在同一列的數據庫中?

 public function actionCreate()
{
    $model = new Registrations();

    if ($model->load(Yii::$app->request->post())) {
        if ($model->validate()) {
            // form inputs are valid, do something here
            $model->student_id = Yii::$app->user->identity->id;
            $model->faculty_id = 1 ;
            $model->department_id = null ;
            $model->course_id = 1;
            $model->save();
            return $this->redirect('../site/profile');
        }
    }
    return $this->render('create', [
        'model' => $model,
    ]);
}

您可以使用checkBoxList()根據課程列表創建復選框列表。

將您的course_id字段更改為以下內容

$form->field($model, 'course_id')->checkboxList(yii\helpers\ArrayHelper::map(Courses::find()->asArray()->all(), 'course_id', 'course_name'), [
    'inline' => true, 
    'unselect'=>null,
    'item' => function($index, $label, $name, $checked, $value){
        $checked = $checked ? 'checked' : '';
        return "<input type='checkbox' class='my-courses' name='{$name}' value='{$value}' {$checked} data-label='{$label}'>&nbsp;<label>{$label}</label>";
    }]);

id屬性添加到您的courses字段,如下所示

$form->field($model, 'courses', ['inputOptions' => ['id' => 'courses']]);

然后將此JavaScript代碼添加到頁面頂部

$js = <<< JS
        $(".my-courses").on('click',function(e){
                let course_name=$(this).data('label');
                let course_field=$("#courses");
                if($(this).is(":checked")){
                    $("#courses").val()==''?course_field.val(course_name):course_field.val(course_field.val()+', '+ course_name);
                }else{
                    let regex=new RegExp(',{0,1}\\\s{0,1}('+course_name+')','g');
                    course_field.val(course_field.val().replace(regex,''));
                }
            })
JS;
$this->registerJs($js, \yii\web\View::POS_READY);

現在,如果選中此復選框,則課程名稱將被復制到輸入字段,並且在提交表單時,您可以在$_POST數組中的特定模型索引下獲得這些字段,如下所示。

[course_id] => Array
                (
                    [0] => 1
                    [1] => 2
                )

[courses] => asdas, shugal, spoon

您可以通過在檢查中的控制器操作中添加print_r(Yii::$app->request->post())來進行驗證

if($model->load(Yii::$app->request->post())){
     print_r(Yii::$app->request->post());

您可以對course_id進行迭代,以保存所有被選中為復選框的course_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM