Вот это уж вам решать, выбирать ли за пользователя приближенное, считая, что он именно этого хочет, или не стоит.
|
laimas,
В моем случае, первый и второй список, относятся только к одному товару, который до этого был выбран, первый выбирается, если текст кнопки равен "Нет", второй список, если "1 сторона". Третий и четвертый списки, к другому товару, с такой же зависимостью от текста кнопок "Нет" и "1 сторона". Пятый и шестой - к третьему товару |
laimas,
и еще. К примеру //создание первого списка let width_1 = []; //добавление последующих значений к списку for (let i = 100; i <= 800; i += 10) { width_1.push(i); } //второй список, с сохраненным выбранным значением из первого //списка ($("#param_1 option:selected").text() - это из html при выборе нужного //значения в option, оно присваивалось нулевому элементу массива width_2) width_2 = [ $("#param_1 option:selected").text(), 100, 150, 225, 200, 250, 300, 350, 400, 450, 500, 550, 600, 700, ]; Теперь такой вопрос, уже задача проще. Как сделать проверку, если в первом списке (width_1) значение не входит во второй список (проверка начиная с первого элемента массива width_2), то как-нибудь выделить весь select второго списка или вывести ошибку? |
:) Когда я читаю подобное, меня терзают сомнения - все ли здесь так, как следовало бы, не лишнее ли здесь.
Что я могу сказать. Не знаю что за продуты, как выбираются и что отправляется серверу. Но предположим, что ваши "безымянные" радио кнопки как-то это определяют, то есть серверу нужны два списка. Они у вас и есть два, которым перезаписывается содержимое. А всего таких пар данных для этих списков может быть до восьмерки на боку. Даем первому списку имя "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,
Извините, что пришлось Вам хоть как-то в это вникать. Спасибо за помощь, я разобрался. :) |
Да вникать то не во что, сыр-бор какой-то. :) Не делают так, нельзя так, такой код сопровождать, это проще выбросить и писать новый.
|
laimas,
Если Вам интересно, что за сайт, могу скинуть в лс ссылку. Точно будете в шоке (от костылей и кривизны) |
Не буду, все не в штанишках рождаются. Но нужно сразу отходить от практики "все в куче".
|
Часовой пояс GMT +3, время: 06:22. |