Создать зависимый выпадающий список в Yii2 - PullRequest
0 голосов
/ 26 июня 2018

Это два поля активной формы в Yii2.

<?= $form->field($model, 'navigation_type')->dropdownList(['Module'=>'Module','Screen'=>'Screen']) ?>

<?= $form->field($model, 'showInUrl')->dropdownList([0=>'No',1=>'Yes']) ?>

Когда я нажимаю Screen, второе поле должно быть изменено на Yes. Когда я нажимаю Module, его следует изменить на No. Я должен сохранить только 0 или 1 в БД.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018
Using Kartik/select Dropdown You Can Code like These : 

<div class="navigation-form">

<?= $form->field($model, 'navigation_type')
->widget(kartik\select2\Select2::className(), [
        'data' => ['Module'=>'Module','Screen'=>'Screen'],
        'options' => ['multiple' => false],
        'pluginOptions' => [
            'placeholder' => 'Select Module',
                ],
        ])
?>
<?= $form->field($model, 'showInUrl')->widget(kartik\select2\Select2::className(),[
            'data' => [0=>'No',1=>'Yes'],
            'options' => ['multiple' => false],
            'pluginOptions' => [
                'placeholder' => 'ShoW URL',
            ],
]) ?>

</div>

<script type="text/javascript">
    $(document).ready(function(){
      $('#navigation-navigation_type').on("change",function(e){
        var sel_val = $(this).select2("val");
        if(sel_val=='Screen'){
          $('[name="navigation[showInUrl]"]').val('Yes').trigger('change');
        }
        if(sel_val=='Module'){
            $('[name="navigation[showInUrl]"]').val('No').trigger('change');
        }
    });
0 голосов
/ 26 июня 2018

Что ж, вам нужно привязать событие change к первому раскрывающемуся списку, используя javascript / jquery, как показано ниже. добавьте сценарий поверх вашего представления и укажите id для обоих раскрывающихся списков.

$this->registerScript("
    $('#navigation_type').on('change',function(){
      if($(this).val() == 'Module'){
          $('#showInUrl').val(0);
       }else{
          $('#showInUrl').val(1);
       }
});",\yii\web\View::POS_END);

<?= $form->field($model, 'navigation_type')->dropdownList(['Module'=>'Module','Screen'=>'Screen'],['id'=>'navigation_type']) ?>

<?= $form->field($model, 'showInUrl')->dropdownList([0=>'No',1=>'Yes'],['id'=>'showInUrl' ])?>

Помимо вышеприведенного решения, вы должны изучить DepDropDown by kartik , который сводит ваши усилия к максимум, и вам просто нужно интегрировать, и это прекрасно работает.

...