Отфильтровать раскрывающееся меню на основе другого выбора

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

Итак, как я могу правильно настроить каждое выпадающее меню?

Вот мой HTML для выпадающих списков:

<select id="collector" onchange="showUser(this.value)"> <option value="" selected disabled>Collector Name</option> <?php foreach($collect->fetchAll() as $name) { ?> <option class="<?php echo $name['Collector Name'];?>" value="<?php echo $name['Collector Name'];?>"><?php echo $name['Collector Name'];?></option> <?php } ?> </select> <select id="date" onchange="showUser(this.value)"> <option value="" selected disabled>Bill Date</option> <?php foreach($bill_date->fetchAll() as $date) { ?> <option class="<?php echo $date['Date'];?>" value="<?php echo $date['Date'];?>"><?php echo $date['Date'];?></option> <?php } ?> </select> 

Это JavaScript, который у меня до сих пор, однако, если я делаю console.log(classN) , все, что он делает, это всего лишь регистрация всех дат. На самом деле он ничего не фильтрует:

 $(document).ready(function () { var allOptions = $('#date option') $('#collector').change(function () { $('#date option').remove(); var classN = $('#collector option:selected').prop('class'); var opts = allOptions.filter('.' + classN); console.log(opts); $.each(opts, function (i, j) { $(j).appendTo('#date'); }); }); }); 

jquery не может запустить php на странице после ее загрузки. Вы можете использовать ajax, выполнив запрос, чтобы получить второй набор параметров из другого файла.

 <select id="collector"> <?php //code to generate initial collector options ?> </select> <select id="date"> <option>--Bill Date--</option> </select> 

В вашем jquery настройте первое раскрывающееся меню, а затем используйте load () для вызова php-файла

 $(document).ready(function(){ $("#collector").on('change', function(){ filterItems(this.value); }); }); function filterItems(value){ var destination = "#date"; var url = "path/to/filterCode.php?v="+value; $(destination).load(url); }); 

В файле php filterCode получите значение, выбранное пользователем

 $selectedCollector = $_GET['v']; 

Затем используйте $ selectedCollector для запроса вашей базы данных и получения соответствующих параметров даты.

Затем внутри цикла результатов:

 echo '<option class="'.$date['Date'].'" value="'.$date['Date'].'">'.$date['Date'].'</option>'; 

Нагрузка () примет эти эховые параметры и поместит их в #date.

Я думаю, вам нужно заполнить раскрывающийся #date на основе раскрывающегося #date #collector , согласно мне лучшим вариантом является ajax.

вот какой-то базовый пример,

 <select id="collector"> <option value=""></option> </select> 

jut считают, что в качестве раскрывающегося #collector будут некоторые параметры, основанные на ваших данных. Теперь вам нужно заполнить раскрывающийся #date ,

  <select id="collector"> <option value=""></option> </select> 

При загрузке страницы вы можете загрузить все данные, если хотите.

при изменении раскрывающегося #collector вы можете отправить запрос ajax и получить данные из базы данных на основе значения #collector , например

  $("#collector").on('change', function(){ $.ajax({ type: method, url: url, data: data, success: function(response) { //populate select box } }); }); 

Ниже ссылки будут полезны,

Как использовать функцию jQuery $ .ajax ()

Выделить выпадающий список с помощью массива с помощью jQuery