Вы сбрасываете option = ""
каждый раз через цикл $.each
. Если выбранная опция не соответствует последнему элементу в listaModelos
, вы не получите нужное значение <option>
.
Вам следует инициализировать переменную перед циклом. Кроме того, вы должны прекратить цикл, когда найдете выбранную опцию, так как нет смысла продолжать ее поиск. Вы можете завершить цикл $.each
, вернув false
из функции обратного вызова.
var option = "";
$.each(listaModelos, function(indexInArray, modelo) {
if (id == modelo.Tipo_PecaID) {
option = '<option value="' + modelo.id_peca_modelo + '">' + modelo.ds_descricao + '</option>';
return false;
}
});
Следующая проблема - этот код:
$('.selectpicker.form-control.model').append(option);
$('.selectpicker.form-control.model').selectpicker('refresh');
Это добавляет опцию к всем селекторам .model
, а не только к одному после текущего .peca
. Измените это на:
$(this).closest(".row").find(".selectpicker.form-control.model")
.append(option)
.selectpicker('refresh');
Вам также необходимо использовать e.stopPropagation()
в обработчике событий change
. Плагин bootstrap-select копирует класс peca
из <select>
в добавляемую оболочку <div>
, поэтому событие выдается в DIV, но $(this).val()
там не работает.
Рабочая скрипка