Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
евгенийпро
8 / 8 / 4
Регистрация: 15.10.2015
Сообщений: 328
1

Логика зависимых друг от друга select

25.08.2018, 15:46. Просмотров 317. Ответов 9

Имеем 3 разных select:
1) в первом список состоит из диаметров(20, 25, 30, 35 ...)
2) во втором список состоит из марок сталей(сталь20, сталь30, сталь09Г2С ...)
3) в третьем список состоит из разновидностей давлений(0.5Мпа, 1.6Мпа ...)

Нужно сделать зависимость друг от друга в select.
Например, выбираем во 2 select'е значение "сталь09Г2С". Автоматически в 1 и 3 select'ах должны удалиться option, которые не подходят по параметрам(например, в 1 select должны остаться "20,35" а в 3 только "0.5Мпа").

Как я делаю:
1) вывожу все значения всех трех select
2) при выборе любого option отправляю ajax-запрос с заполненной формой (данные собираю .serializeArray())
3) в зависимости от выбранных параметров делаю запрос в БД, откуда мне прилетают все элементы(с этими тремя нужными свойствами), подходящие под выбранные параметры
------
4) как дальше логику сделать?
Думаю, нужно сформировать новый массив для всех 3 select , но додуматься не могу, как удалить лишние option
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2018, 15:46
Ответы с готовыми решениями:

Как в PHP отделить элементы друг от друга, чтобы не ругались друг на друга?
<?php $chitat = fopen('yoo.txt', 'r'); if (!$chitat) { echo 'Ошибка при открытии файла...

Выпадающие списки в зависимых select для рубрик вордпресс
Здравствуйте. Очень нужна Ваша помощь. Никак не могу понять как можно организовать зависимость...

Тестируем друг-друга
Тестируем друг-друга. Столкнулся с тем что куча людей называют себя программистами - являясь...

Наложение друг на друга картинок-ссылок
собстна вопрос в самой теме.

Нарисовать 5 вписанных друг в друга геометрических фигур
Мне нужно нарисовать 5 вписанных друг в друга геометрических фигур

9
andyyy
726 / 292 / 146
Регистрация: 26.05.2016
Сообщений: 1,928
25.08.2018, 17:17 2
Можнет просто на js отслеживайте событие, проверяйте если равно то то то остальные оптион убирайте
0
евгенийпро
8 / 8 / 4
Регистрация: 15.10.2015
Сообщений: 328
25.08.2018, 18:53  [ТС] 3
Цитата Сообщение от andyyy Посмотреть сообщение
если равно то то то остальные оптион убирайте
не понял
0
andyyy
726 / 292 / 146
Регистрация: 26.05.2016
Сообщений: 1,928
26.08.2018, 09:47 4
Цитата Сообщение от евгенийпро Посмотреть сообщение
Нужно сделать зависимость друг от друга в select.
Например, выбираем во 2 select'е значение "сталь09Г2С". Автоматически в 1 и 3 select'ах должны удалиться option, которые не подходят по параметрам(например, в 1 select должны остаться "20,35" а в 3 только "0.5Мпа").
1. отслеживаем событие выбора Select
2. получаем значение, если оно равно к примеру сталь09Г2С
3. находим другие оптион и убираем
0
26.08.2018, 09:47
евгенийпро
8 / 8 / 4
Регистрация: 15.10.2015
Сообщений: 328
26.08.2018, 18:54  [ТС] 5
Цитата Сообщение от andyyy Посмотреть сообщение
2. получаем значение, если оно равно к примеру сталь09Г2С
3. находим другие оптион и убираем
Не вариант. Объясню на другом примере(города).
Есть список элементов. У каждого элемента есть 3 свойства:
а) Страна
б) Город
в) Численность населения
Например, 3 селекта сперва заполнены так:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<select name="country">
    <option>Россия</option>
    <option>Китай</option>
    <option>США</option>
</select>
<select name="city">
    <option>Москва</option>
    <option>Санкт-Петербург</option>
    <option>Нью-Йорк</option>
</select>
<select name="people">
    <option>4 млн</option>
    <option>5 млн</option>
</select>
Например, выбрали мы в списке населений "5 млн". У нас сразу в списке городов должны пропасть "Нью-Йорк", а в списке стран должны пропасть "США" и "Китай"
0
Nick007
101 / 94 / 38
Регистрация: 30.09.2009
Сообщений: 437
26.08.2018, 19:59 6
Как вариант:
Здесь нужно каждому option проставить id
и в option от sity добавить связи с страной и населением
в параметре data: <option id="5" data-country="1" data-people="7" >Санкт-Петербург</option>
в которых храним id соответствующих пунктов.
В js добавить разные обработчики на селекты:
Для sity сразу проверяем содержимое data и блокируем option в остальных селектах,
которые не совпадают с полученными id.
Для country на основе выбранного option получаем его id,
далее в sity блокируем все option, в которых отсутствует data-country с указанным id,
далее выбираем оставшиеся option в sity, выбираем весь набор id people содержащийся в data-people
и блокируем option в селекте people, которые не содержатся в полученном списке.
Для селекта people действуем почти так же, как и для селекта country.

Тут нюанс, при выборе значения в любом селекте, у нас частично или полностью, блокируется выбор в остальных селектах.

Добавлено через 7 минут
Цитата Сообщение от евгенийпро Посмотреть сообщение
Например, выбрали мы в списке населений "5 млн". У нас сразу в списке городов должны пропасть "Нью-Йорк", а в списке стран должны пропасть "США" и "Китай"
Для такого варианта, когда города есть не для всех стран,
Нужно проставить в option, в data, все варианты совпадений.
Но это будет уже черезмерно,
проще делать ajax запрос на сервер и отрисовывать все селекты заново, в соответствии с условием.
0
FloppyDisc
Особый статус
605 / 206 / 161
Регистрация: 18.11.2015
Сообщений: 1,046
26.08.2018, 21:10 7
Как вариант плагин jQuery - dependent-drop
https://github.com/kartik-v/dependent-dropdown
использование
http://www.bestjquery.com/?Asg0Afm3

Добавлено через 3 минуты
забыл демки
http://plugins.krajee.com/dependent-dropdown/demo
0
andyyy
726 / 292 / 146
Регистрация: 26.05.2016
Сообщений: 1,928
27.08.2018, 12:15 8
Цитата Сообщение от евгенийпро Посмотреть сообщение
Например, выбрали мы в списке населений "5 млн". У нас сразу в списке городов должны пропасть "Нью-Йорк", а в списке стран должны пропасть "США" и "Китай"
на каких основаниях именнно они ?

Добавлено через 2 минуты
Цитата Сообщение от евгенийпро Посмотреть сообщение
1 и 3 select'ах должны удалиться option, которые не подходят по параметрам
как сервер поймет - что вы хотите - вы должны указать на каких основаниях
0
евгенийпро
8 / 8 / 4
Регистрация: 15.10.2015
Сообщений: 328
27.08.2018, 23:40  [ТС] 9
Цитата Сообщение от andyyy Посмотреть сообщение
на каких основаниях именнно они ?
тут тоже на сервере надо обработать данные select'ов и сформировать новые допустимые значения select'ов
По-сути, мне логика нужна как на мвидео у фильтра(у меня пример про города был, но логика такая же):
1) выбираем в ноутбуках бренд 'Sony'
2) в категориях сразу все отсеивается(ноутбуки-трансформеры и т.д) и остается только "ноутбуки"
То есть там множество свойств и все они друг от друга зависят. Каждая комбинация что-то да отсеивает. Мне надо то же самое.

На входе имеем только массив со всеми элементами.
1) Пробегаюсь по всем элементам, формирую массив для каждого select'а (то есть все select заполняю всеми возможными option)
2) Дальше при выборе одного из option снова пробегаюсь по элементам, но уже смотрю, чтобы выбранный option был у этих элементов. На этом основании снова строю для всех select новые option.
Вроде как работает, но проблема в том, что если мы заполняем 2 и более select, в списке остается только то значение, которое мы выбрали. Чтобы снова увидеть все доступные значения нужно сперва выбрать "Все"...
Голова уже болит, не знаю как сделать нормально
0
Mr_Sergo
1321 / 698 / 261
Регистрация: 29.04.2016
Сообщений: 1,912
28.08.2018, 10:47 10
Цитата Сообщение от евгенийпро Посмотреть сообщение
Чтобы снова увидеть все доступные значения нужно сперва выбрать "Все"
Сделайте кнопку Сбросить кому нужно тот нажмет
0
28.08.2018, 10:47
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2018, 10:47

Остановить 2 функции рекурсивно вызывающие друг друга
У меня есть две функции которые могут вызывать друг друга (первая берет массив с действиями из json...

Как отображать сообщения в форуме так, чтобы они не накладывались друг на друга?
Делаю форум, и сталкнулся с такой проблемой. Как отображать сообщения так что бы они не...

Найти положение заданных прямой и окружности относительно друг друга при помощи оператора if
Заданы окружность радиуса R с центром в начале коор¬динат и прямая, проходящая через точки А (х; у)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru