Yii2 dropdown2选择取决于dropdown1

时间:2019-01-14 07:16:08

标签: yii2 dropdown selected

我有两个标准下拉菜单:

$form->field($model, 'typ_id')->dropDownList(
    \yii\helpers\ArrayHelper::map(app\models\Plra::find()->all(), 'id', 'name'),
);

$form->field($model, 'tol_id')->dropDownList(
    \yii\helpers\ArrayHelper::map(app\models\Plratol::find()->all(), 'id', 'name')
);

,如果选择一个特定的tol_id值,我想在下拉列表typ_id中选择一个确定的值(默认情况下,实际上是建议)。基本上,这两个下拉列表是独立的。作为实现我想要的解决方案,我可以使其作为依赖项下拉列表:

$form->field($model, 'typ_id')->dropDownList(
    \yii\helpers\ArrayHelper::map(app\models\Plra::find()->all(), 'id', 'name'), [
        'onchange' => '$.post("' . \Yii::$app->urlManager->createUrl('plra/listtol?typ_id=') . '"+$(this).val(), function(data) {$("select#tol_id").html(data);});',
    ]
);

$form->field($model, 'tol_id')->dropDownList(
    \yii\helpers\ArrayHelper::map(app\models\Plratol::find()->all(), 'id', 'name'), [
        'id' => 'tol_id'
    ]
);

控制器:

public function actionListtol($typ_id) {
    if ($typ_id == 2) {
        $plratol = Plratol::find()->where(['typ_id' => 2])->one();

        echo "<option value='" . $plratol->id . "'>" . $plratol->name . "</option>";
    } else {
        $plratols = Plratol::find()->where(['typ_id' => NULL])->all();

        echo "<option>Select</option>";
        foreach ($plratols as $plratol) {
            echo "<option value='" . $plratol->id . "'>" . $plratol->name . "</option>";
        }
    }
}

但是我想知道对于这样一个简单的依赖/场景,是否有更简单的方法也许是js?如果可以,请提供示例代码,因为不幸的是js不是我所熟悉的。

我想在没有Kartik的DepDrop扩展的情况下解决它。

2 个答案:

答案 0 :(得分:0)

您可以使用纯JavaScript或jQuery,

在第一个下拉列表上添加一个onchange()事件,并使用ajax in onchange()函数获取第二个下拉列表的必需值并设置其html。

答案 1 :(得分:0)

尽管您没有任何代码可参考。如果我理解正确,那么如果将其传递给选定的值,则依赖的下拉列表将不会在加载时起作用。您仍然可以使用JS解决这个问题。

window.setTimeout(function timer(){
    var grid = $("#contactGrid").data("JSGrid");
    localStorage.setItem('data', JSON.stringify(grid.data))
},10000)

上面的代码将触发 $( document ).ready( function(){ e = $('#parent'); // replace with your elements name e.change(); }); 事件,您提供的任何值都将在从属下拉列表中使用。