Показать сообщение отдельно
  #14 (permalink)  
Старый 21.11.2020, 20:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Когда я читаю подобное, меня терзают сомнения - все ли здесь так, как следовало бы, не лишнее ли здесь.

Что я могу сказать. Не знаю что за продуты, как выбираются и что отправляется серверу. Но предположим, что ваши "безымянные" радио кнопки как-то это определяют, то есть серверу нужны два списка. Они у вас и есть два, которым перезаписывается содержимое. А всего таких пар данных для этих списков может быть до восьмерки на боку.

Даем первому списку имя "width", второму "height", под такими же именами определяем и две переменные со значением по умолчанию 0.

Список заполняется опциями, это цикл, в цикле проверяется текущее значение со значением window[this.name], и если равно, опция выбирается.

При выборе в списке значение его сохраняется в переменной - window[this.name] = this.value. А при сравнении, при построении списка уж как хотите, выбирайте ближайший или ... Ближайший или равный, это искать в массиве значение соответствующего списка до тех пор пока значение не будет больше window[select.name]. Берем предыдущий элемент и заканчиваем поиск - это будет либо равно window[select.name], либо ближайшее меньшее window[select.name] значение. Либо возвращаем 0, если ничего не найдено.

Но это все прелюдии, а остальное, то что у вас, это нечто. Скажите, как это может быть, что параметры товаров, которых есть определяемые значения администратором в базе или на худой конец в переменных, и на сервере, явно прописывают циферки в js-коде? Сервер должен отдавать клиенту эти данные, с ними он должен работать, а никак не

for (let i = 100; i <= 800; i += 10) ... и $("#param_1 option:selected").text().

Если это возможно, а у вас возможно, вы вообще не должны оперировать конкретными свойствами объекта данных для этих списков. Пусть ваши радио кнопки имеют значения 0 и 1. На сервере задаются параметры ширины и высоты для списков как диапазон с шагом. То есть, в базе прописано для значения 0: width => min = 100, max = 800, step = 10, height => min = 100, max = 600, step = 50, для значения 1 другие.

Например, сервер, это РНР (на другом языке будет по другому, что не суть важно), по этим параметрам готовится массив данных, который будет описывать все данные для вашего кода, в частности для списков:

$data = [
    0 => [
        'width'     => range($row->width->min, $row->width->max, $row->width->step),
        'height'    => range($row->height->min, $row->height->max, $row->height->step)
    ],
    1 => [
        'width'     => range($row->width->min, $row->width->max, $row->width->step),
        'height'    => range($row->height->min, $row->height->max, $row->height->step)
    ]
];


Это будут массивы значений для списков полученные по указанным диапазонам с указанным шагом. Эти данные отдаются клиенту как JSON. Данные, с которыми будет работать клиентский сценарий в текущий момент, определяются значением выбранной кнопки. В общем с таким подходом. А если width_1, width_2, let i = 100; i <= 800; i += 10, то это уже караул, не вникая что это вообще такое, даже не понять что тут есть что, и ломать мозги этим нет никакого желания.

Последний раз редактировалось laimas, 22.11.2020 в 08:25.
Ответить с цитированием