Значение для динамического элемента

111
04 августа 2019, 21:50

Через URL ко мне приходят параметры со значениями, которые я записываю в массив paramsURL[].
Тогда мне нужно установить пришедшие данные как value для select.

$('select[name="brand"]').val(paramsURL['brand']); // этот select сгенерирован динамически. Поэтому jQ не может записать для него значение

Вопрос: Как правильно задать значение для динамически сгенерированного элемента?

Весь код:

// Loading values to filter form 
$('#filterName').on('click', function () {    // при клике на блок 
    if (paramsURL['mtype'] > 0) {             // проверяем есть ли значение для этого типа 
        $('select[name="mtype"]').val(paramsURL['mtype']).trigger('change'); // задаем его из массива и устанавливаем триггер change. Здесь работает на Отлично! Потому, что это статически создаваемый select 
        if (paramsURL['brand'] > 0) {         // тоже самое с brand 
            setTimeout(function() {           // сделал костыль через setTimeout 
                $('select[name="brand"]').val(paramsURL['brand']).trigger('change'); 
            }, 5);                            // который сработает через 5мс 
        } 
    } 
});

Вот еще работа триггера trigger('change');

$('select[name="mtype"]').change(function () { 
    $.ajax({ 
        url: '/api/catalog/filter/brands?idtype=' +$('select[name="mtype"]').val(), 
        method: 'GET', 
        dataType: 'json', 
        contentType: "application/json;charset=UTF-8", 
        success: function (data) { 
            var brand = $('select[name="brand"]'); 
            brand.empty(); 
            brand.append('<option selected disabled hidden>Марка</option>'); 
            brand.removeClass('mark'); 
 
            $.each(data, function(key, val){ 
                brand.append('<option value="' +key+ '">' +val+ '</option>'); 
            }); 
        }, 
        error: function(request, status, error) { 
            var statusCode = request.status; 
            console.log(statusCode); 
        } 
    }); 
});

Answer 1

Значение для второго select-а надо устанавливать после того, как он асинхронно заполнен.

$('#filterName').on('click', function () {
  if (paramsURL['mtype'] > 0) {
    $('select[name="mtype"]').val(paramsURL['mtype']).trigger('change');
    $('select[name="brand"]').data("value", (paramsURL['brand'] > 0)? paramsURL['brand'] : "");
  }
});
$('select[name="mtype"]').change(function () {
  ...
     $.each(data, function(key, val){
        brand.append('<option value="' +key+ '">' +val+ '</option>');
     });
     if (brand.data("value")) {
       brand.val(brand.data("value")).trigger('change');
       brand.data("value", "");
     }
  ...
});
READ ALSO
Проблема отображения Slick Slider

Проблема отображения Slick Slider

Всем привет, проблема такая, на сайте - https://markuslutrellgithub

104
Передать значение input обработчику

Передать значение input обработчику

У меня есть input на странице в котором по умолчанию value задано 1При клике на кнопку я передаю значение через ajax, значение этого поля должно передаться...

117
Модальное диалоговое окно

Модальное диалоговое окно

Как создать модальное диалоговое окно(как окно папки) на html странице, которое можно перемещать свободно по странице? С чего стоит начать?

105
Опустить ниже на несколько пикселей labels в Google Chart

Опустить ниже на несколько пикселей labels в Google Chart

Необходимо опустить на несколько пикселей label по оси X, для отрисовки linel chart использую библиотеку Google Chart (использую Vue фреймворк и Google Chart)Возможно...

100