Как подтянуть нужные данные в select исходя из другого select`а?

Всем привет!
Суть проблемы в следующем:
Есть select, в value передаются id, нужно на onchange этого select`а генерировать второй select и передавать в него данные с базы с соответствующими id.
Как сделал я:
Написал метод в контроллере с возвратом json, на onchange обращаюсь к нему через ajax и подставляю полученные данные в новый select.
Почему мне не нравится этот метод:
При перезагрузке страницы второй select пропадает(т.к не было вызова ajax), select выводится не через ActiveForm, а мне надо полученные данные сохранить в базу, конечно можно подставить нужный id, но получается какой-то костыль, что ли.
В общем нужно в select передавать данные в зависимости от выбранного пункта в предыдущем select, есть идеи?
Спасибо.
Код:
$form->field($model, 'goodMaterial')->dropDownList($goodItems)

<div class="goodAttribute"></div>
Получаю и генерирую новый select:
$(function(){
                        var good_attrs
                        $('#goodmaterial').on('change', function(){
                            var goodId = this.value;
                            $.ajax({
                                url:"good-attribute",
                                type:"GET",
                                data: {id: goodId},
                                success: function(data) {
                                     good_attrs = jQuery.parseJSON(data);
                                     $('.goodAttribute').html('<span>Атрибут:</span><select name="" id=""></select>');
                                     good_attrs.forEach(function(element) {
                                        $('.goodAttribute select').html('<option value="'+element['attribute']+'">'+element['name']+'('+element['attribute']+')'+'</option>');
                                    });
                                   
                                }
                            });
                        });
                    });

Сам метод контроллера простой:
public function actionGoodAttribute($id)
    {
        $data =Good::find()->where(['category_id' => $id])->asArray()->all();
        return json_encode($data);
    }
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Сделайте второй select в форме
$form->field($model, 'goodAttribute')->dropDownList($goodItems)

И подставляйте значения туда. Возвращайте с сервера массив, как для первого.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы