Как можно динамически изменять значения в мультиселекте, при условии, что есть поля в json? есть экшн, возвращающий json с районами, в зависимости от переданного айди региона:
public function actionDistricts($region){
$query = ArrayHelper::map(\app\models\zo_gcd\District::find()->where(['region_id' => $region])->orderBy('name')->all(), 'id', 'name');
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return $query;
}
рендер контролов:
<?= $this->render('mainsearch/controls/multiselect', [
'id' => 'region-input',
'source' => $region,
'label' => 'Регион',
'name' => 'multiselect_region[]',
'class' => 'col-sm-3 col-xs-12 region' ]); ?>
<?= $this->render('mainsearch/controls/multiselect', [
'source' => $district,
'label' => 'Район',
'name' => 'districtslist[]',
'class' => 'col-sm-3 col-xs-12' ]); ?>
Сам контрол:
<?php
$zname = preg_replace("~(\\\|\*|\?|\[|\?|\]|\(|\\\$|\))~", "",$name);
if(isset($_GET[$zname])) {
$values = $_GET[$zname] ?: [];
} else {
$values = [];
}
?>
<div class="<?= $class ? $class : "col-sm-3 col-xs-12" ?>">
<label><?= $label ?></label>
<select name="<?= $name ?>" multiple="multiple">
<?php foreach ($source as $id => $val) { ?>
<option <?= in_array($id, $values) ? 'selected="selected"' : '' ?> value="<?= $id ?>"><?= $val ?></option>
<?php } ?>
</select>
</div>
И что-то похожее на событие по изменению селекта:
var onchangeBinder = function () {
// мониторятся только имеющие атрибут name и активные + objecttype
$('.searchform :input[name][disabled!=disabled], .searchform :input#objecttype').unbind("change").change(function () {
// определяем ид элемента
switch ($(this).attr('id')) {
case "objecttype":
setForm();
break;
case "multiselect_region":
//something here
break;
}
console.log("-----------------");
console.log($(this).attr('name'), $(this).val());
console.log("-----------------");
loadByCatalogCount();
});
};
Пытаюсь сообразить, как можно реализовать следующую задачу: