在Yii2中创建依赖项下拉列表

时间:2018-06-26 16:53:33

标签: yii2 dropdown

这是Yii2中的两个活动形式字段。

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

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

当我单击Screen时,第二个字段应更改为Yes。当我单击Module时,应将其更改为No。我只需将01保存到数据库。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

好吧,您需要使用以下javascript / jquery将change事件绑定到第一个下拉列表。将脚本添加到视图顶部,并在两个下拉菜单中分别提供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,这可以减少您的工作量, 一个最大值,您只需要集成即可,效果很好。

答案 1 :(得分:1)

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');
        }
    });