Добавление / удаление параметров списка выбора в IE

У меня есть 2 списка выбора, выбранный элемент в первом элементе управления отображается во втором. Список условий сначала загружает все доступные параметры, а затем фильтрует их в зависимости от того, что выбрано в списке категорий.

Моя проблема заключается в том, что если я фильтрую более одного раза, моя переменная начальных условий уменьшается каждый раз при изменении параметра выбора категорий, и я получаю неполные данные в списке условий.

Например, я фильтрую по категории 1, чтобы увидеть все условия, относящиеся к категории 1, в моем списке условий. Если я затем отфильтрую по категории 2, он присваивает только три текущих условия категории 1 переменной условий перед фильтрацией, и в результате я не получаю никаких условий.

Как мне фильтровать по полному исходному списку условий каждый раз при изменении категории?

 $(document).on('change', '#category', function (e) {
    
        var categories = $("#category option"); 
        var conditions = $("#condition option"); 

        var $selectedIndex = $(this).find('option:selected').data('position');

        $("#condition").empty();
        conditions.each(function (index, value) {
            $value = $(value);
            if ($value.hasClass('cat-' + $selectedIndex)) {
                $("#condition").append($value); 
            }
        });
    
    });
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id = "category">
  <option class = "cat-1">Category 1</option>
  <option class = "cat-2">Category 2</option>
  <option class = "cat-3">Category 3 </option>
</select>

<select id = "condition">
  <option class = "cat-1">Category 1-A</option>
  <option class = "cat-1">Category 1-B</option>
  <option class = "cat-1">Category 1-C</option>
  <option class = "cat-2">Category 2-A</option>
  <option class = "cat-2">Category 2-B</option>
  <option class = "cat-2">Category 2-C</option>
  <option class = "cat-3">Category 3-A</option>
  <option class = "cat-3">Category 3-B</option>
  <option class = "cat-3">Category 3-C</option>
</select>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
44
1

Ответы 1

Я пробовал ваш код, и он тоже не работает в хроме. С вашим кодом не так:

а) $ selectedIndex был инициализирован как undefined

б) Вы берете исходный список выбора условий и делаете его пустым перед повторной инициализацией. Это приведет к потере всех начальных параметров, присутствующих в условиях select, когда повторная инициализация произойдет в функции обратного вызова, переданной методу conditions.each.

Приведенный ниже код будет работать для вас:

var conditions = $("#condition option"); 
$(document).on('change', '#category', function (e) {
    $("#condition").empty();
    var selectedCategory = $(this).children("option:selected").val();
    conditions.each(function (index, value) {
        $value = $(value);
        if ($value.val().indexOf(selectedCategory) > -1) {
            $("#condition").append($value); 
        }
    });
    $("#condition").val($("#condition option:first").val());
});

Спасибо, я забыл добавить сюда атрибут данных в разметке, который использовал $ selectedIndex

noclist 13.12.2018 19:15

Я получаю длину 0 для переменной условий, если я не объявлю ее в событии изменения.

noclist 13.12.2018 19:23

Этот вариант работает, но как выбрать первый элемент, относящийся к этой категории.

Saket Yadav 13.12.2018 19:38

Эта строка $("#condition").val($("#condition option:first").val()); выполняет работу по выбору первого элемента в раскрывающемся списке условий.

Kaashan 14.12.2018 14:40

Другие вопросы по теме