Всем привет!
Суть проблемы в следующем:
Есть 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);
}