我有两个标准下拉菜单:
$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扩展的情况下解决它。
答案 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();
});
事件,您提供的任何值都将在从属下拉列表中使用。