Как скрыть параметры из выпадающего меню поиска, которые ничего не найдут? Jquery - PullRequest
0 голосов
/ 12 января 2019

Фильтр сайта реализован с тремя выпадающими меню (цвет, модель, двигатель), каждое из которых имеет свой список параметров. Мне нужно скрыть параметры цвета / модели / двигателя, которые не дадут никаких результатов (т. Е. Не найдены | response.items.length == 0).

Сайт работает на Django, поэтому начальные загруженные цвет / модель / движок уже отфильтрованы с помощью views.py до некоторой степени, что означает, что у них нет параметров, которые не имеют никаких изменений, независимо от двух других выбор. Это означает, что, например, для цвета RED нет результатов, независимо от других параметров, цвет RED не загружается (фильтруется в views.py).

Однако, если, скажем, для цветного КРАСНОГО, есть только модели с двигателем "A", и нет моделей с двигателем "B", мой вопрос заключается в том, как скрыть параметр "B" из раскрывающееся меню двигателя, когда выбран КРАСНЫЙ? И наоборот, если у механизма «B» нет изменений RED, как скрыть RED в раскрывающемся меню цвета при выборе «B»?

Часть списка цветов выглядит следующим образом:

                <div class="select-color__items">
                   {% for color in colors %}
                    <label for="{{ color|slice:"1:" }}" style="background-color: {{ color }}" class="select-color__item js-color-item js-select-filter  {% if color == "#ffffff" %}select-color__item_white{% endif %}">
                    <input type="radio" id="{{ color|slice:"1:" }}" name="color" {% if request.GET.color == color|slice:"1:" %}  checked="checked" {% endif %} value="{{ color|slice:"1:" }}"/>
                  </label>
                  {% endfor %}
                 <div class="select-color__all-wrapp">
                    <label for="all" class="select-color__all open js-color-item js-select-filter">
                      {{ '__CATALOG-ALL__'|translate_value:LANGUAGE_CODE }}
                      <input type="radio" id="all" name="color" value="all"/>
                    </label>
                  </div>
                </div>

Функция Javascript updateFilter выглядит следующим образом:

function updateFilter(data) {
    var form_data = data.$form.serializeArray();
    form_data.push({name: 'url', value: urlPath + '?' + data.$form.find(":input:not([name=csrfmiddlewaretoken],[name=category])").serialize()});
    setTimeout(function () {
        $.post({
            data: form_data,
            url: data.url,
            success: function (response) {
                ChangeUrl( 'Title test' , response['url'] );
                data.callback(response)
            }
        });
    }, 100);
}

Ответ содержит новые элементы, которые были найдены с выбранными параметрами (цвет, модель, двигатель). Нужно ли мне на самом деле делать аналогичные запросы для каждой опции в двух других выпадающих меню, а затем отфильтровывать на основе response.items.length? Это единственное решение, которое я придумал, и оно будет работать, но оно кажется таким огромным и неэффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...