在Yii2中创建相关下拉列表

在Yii2中创建相关下拉列表,yii2,dropdown,Yii2,Dropdown,这是Yii2中的两个活动表单字段 <?= $form->field($model, 'navigation_type')->dropdownList(['Module'=>'Module','Screen'=>'Screen']) ?> <?= $form->field($model, 'showInUrl')->dropdownList([0=>'No',1=>'Yes']) ?> 单击屏幕时,第二个字段应更改为“是”

这是Yii2中的两个活动表单字段

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

<?= $form->field($model, 'showInUrl')->dropdownList([0=>'No',1=>'Yes']) ?>
单击屏幕时,第二个字段应更改为“是”。单击模块时,应将其更改为“否”。我只需将0或1保存到数据库中


如何实现这一点?

好吧,您需要使用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' ])?>
除了上述解决方案外,您还应该研究哪些方法会减少您的工作
一个最大值,您只需要集成,它工作得很好。

好的,您需要使用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' ])?>
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');
        }
    });
除了上述解决方案外,您还应该研究哪些方法会减少您的工作
一个最大值,您只需要集成,它工作得很好。

它会在db中存储0,1表示“否”、“是”吗?您需要将showInUrl下拉列表的值更改为0和1,而不是“是”和“否”,以便执行此操作@初学者开发人员我编辑了脚本请参见现在我重新绘制了$“showInUrl”.val“否”;使用$showInUrl.val0;和$'showInUrl'.val'Yes';使用$showInUrl.val1;您现在可以检查它是否正常工作它是否将0,1存储为数据库中的“否”、“是”?您需要将showInUrl下拉列表的值更改为0和1,而不是“是”和“否”,以便执行此操作@初学者开发我编辑了脚本请参见现在我重新绘制了$“showInUrl”.val“否”;使用$showInUrl.val0;和$'showInUrl'.val'Yes';使用$showInUrl.val1;您现在可以检查它是否能够正确地工作,因为依赖下拉列表kartik已经有了一个扩展select2的独立插件,如果你最终不得不手动选择下拉列表,那么使用select2而不是dependent下拉列表有什么意义?就像简单的dependent下拉列表一样kartik已经有了一个扩展select2的独立插件,如果你最终不得不像一个简单的下拉列表那样手动选择下拉列表,那么使用select2而不是dependent下拉列表有什么意义
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');
        }
    });