У меня есть два стандартных выпадающих списка:
$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>";
}
}
}
но мне интересно, есть ли более простой способ, возможно, mit js
для такой простой зависимости / сценария? Если да, не могли бы вы предоставить пример кода, потому что, к сожалению, я не знаком с js.
Я бы хотел решить эту проблему без расширения Kartik DepDrop.