Обьеденить фильтр input search c select
Добрый день! Подскажите пожалуйста. У меня есть фильтр который фильтрует вакансии по названию при вводе текста в инпут и по городу и отделу при выборе select. Оба фильтра хорошо работают. Но проблема в том, что они не работают вместе. То есть например, если мы выбираем город, то при вводе тества в инпут поиск должен быть только среди ваканчий в этом городе. А не среди всех. Ниже прикрепляю код. Подскажите пожалуйста, как обьеденить эти два фильтра. Буду очень благодарна, за помощь!
<div class="main-screen-form"> <div class="search-input__wrapper"> <input type="text" placeholder="Zoek op functie of trefwoord" class="search-input" id="filter"> <div class="searh-input-btn"> ZOEKEN </div> </div> <div class="filter-row"> <div class="location-select"> <select class="select" id="city-select"> <option value="all" selected="">Alle locaties</option> <option value="Amersfoort">Amersfoort</option> <option value="Amsterdam">Amsterdam</option> <option value="Antwerpen">Antwerpen</option> <option value="Apeldoorn">Apeldoorn</option> <option value="Arnhem">Arnhem</option> <option value="Den Haag">Den Haag</option> <option value="Eindhoven">Eindhoven</option> </select> </div> <div class="department-select"> <select class="select" id="department-select"> <option value="all" selected="">Alle afdelingen</option> <option value="HR">HR</option> <option value="Marketing">Marketing</option> <option value="Sales">Sales</option> <option value="Design">Design</option> </select> </div> </div> </div> <ul class="row"> <li class="col-lg-4 col-md-6 card-item wow fadeIn" data-wow-offset="280"> <a href="" class="vacancies__item"> <div class="card__inner-tags" data-department="Marketing" data-city="Amersfoort"> <div class="vacancies__item-title"> Copywriter Arbeidsmarktcommunicatie </div> <p> Copy schrijven waar talent op de arbeidsmarkt warm van wordt. </p> <div class="vacancies__item-tags"> <div class="vacancies__item-tag"> <div class="tag-icon-wrapper"> <img src="img/tag-1.svg" alt=""> </div> Amersfoort </div> <div class="vacancies__item-tag"> <div class="tag-icon-wrapper"> <img src="img/tag-2.svg" alt=""> </div> Marketing </div> <div class="vacancies__item-tag"> <div class="tag-icon-wrapper"> <img src="img/tag-3.svg" alt=""> </div> 40 uur </div> </div> <div class="link"> Bekijk vacature <img src="img/link-img.svg" alt=""> </div> </div> </a> </li> <li class="col-lg-4 col-md-6 card-item wow fadeIn" data-wow-offset="280"> <a href="" class="vacancies__item"> <div class="card__inner-tags" data-department="HR" data-city="Amsterdam"> <div class="vacancies__item-title "> UX Designer </div> <p> Copy schrijven waar talent op de arbeidsmarkt warm van wordt. </p> <div class="vacancies__item-tags"> <div class="vacancies__item-tag"> <div class="tag-icon-wrapper"> <img src="img/tag-1.svg" alt=""> </div> Amsterdam </div> <div class="vacancies__item-tag"> <div class="tag-icon-wrapper"> <img src="img/tag-2.svg" alt=""> </div> HR </div> <div class="vacancies__item-tag"> <div class="tag-icon-wrapper"> <img src="img/tag-3.svg" alt=""> </div> 40 uur </div> </div> <div class="link"> Bekijk vacature <img src="img/link-img.svg" alt=""> </div> </div> </a> </li> </ul>
$(document).ready(function () {
$("#filter").keyup(function () {
var filter = $(this).val(),
count = 0;
$("li").each(function () {
if ($(this).find(".vacancies__item-title").text().search(new RegExp(filter, "i")) < 0) {
$(this).find('.vacancies__item-title').parent().parent().parent().fadeOut(0).addClass('hidden');
} else {
$(this).find('.vacancies__item-title').parent().parent().parent().show().removeClass('hidden');
count++;
}
});
if(count == 0) {
document.getElementsByClassName('no-results')[0].style.display = 'block';
} else {
document.getElementsByClassName('no-results')[0].style.display = 'none';
}
});
});
let citySelect = document.getElementById('city-select');
let departmentSelect = document.getElementById('department-select');
let educationSelect = document.getElementById('education-select');
var change = new Event('change')
$("#city-select").on("change", function () {
let vacancies = 0;
document.querySelectorAll('.card__inner-tags').forEach(item=>{
if( ( item.dataset.department.indexOf(departmentSelect.value) != -1 || departmentSelect.value == 'all' ) && ( item.dataset.city.indexOf(citySelect.value) != -1 || citySelect.value == 'all' )){
item.closest('.card-item').style.display = 'flex';
vacancies++;
}
else{
item.closest('.card-item').style.display = 'none';
}
});
if(vacancies == 0) {
document.getElementsByClassName('no-results')[0].style.display = 'block';
} else {
document.getElementsByClassName('no-results')[0].style.display = 'none';
}
});
$("#department-select").on("change", function () {
let vacancies = 0;
document.querySelectorAll('.card__inner-tags').forEach(item=>{
if( ( item.dataset.department.indexOf(departmentSelect.value) != -1 || departmentSelect.value == 'all' ) && ( item.dataset.city.indexOf(citySelect.value) != -1 || citySelect.value == 'all' )){
item.closest('.card-item').style.display = 'flex';
vacancies++;
}
else{
item.closest('.card-item').style.display = 'none';
}
});
if(vacancies == 0) {
document.getElementsByClassName('no-results')[0].style.display = 'block';
} else {
document.getElementsByClassName('no-results')[0].style.display = 'none';
}
});
$("#city-select").on('click', (event) => {
dataLayer.push({event:'customClickEvent', eventCategory: 'Filter', eventAction: 'Filter', eventLabel: 'LOCATION/'+citySelect.value});
});
$("#department-select").on("change", (event) => {
dataLayer.push({event:'customClickEvent', eventCategory: 'Filter', eventAction: 'Filter', eventLabel: 'AFDELING/'+departmentSelect.value});
});
|
KatyJ, "поисковая" функция должна быть одна.
Вызывать ее можно по событиям как в инпуте, так и в селекте. Эта функция должно использовать оба критерия в поиске. Или ты вообще не программист и тебе нужно чтобы кто-то написал такую программу? |
| Часовой пояс GMT +3, время: 09:28. |