Проблема вашего кода в том, что вы обрабатываете "только то поле, в котором происходит ввод",
а не все поля одновременно.
В обработчике input вы проверяете placeholder текущего поля и добавляете ровно один параметр
либо title
либо genre
либо releaseYear
Но вам нужно собирать значения из всех полей ввода и формировать строку запроса, содержащую все заполненные параметры, объединённые через &.
Как должно работать
- Если заполнено только поле Название → `?title=значение`
- Если заполнены «Название» и Жанр → `?title=значение&genre=значение`
- Если заполнены все три → `?title=Значение&genre=Значение&releaseYear=Значение`
- Если ничего не заполнено → без параметров (просто `
https://sb-film.cc/films`)
Почему ваш текущий код не работает
const GET = await fetch(`
https://sb-film.cc/films` +
(placeholderText == 'Название фильма' ? `?title=${target}` : '') +
(placeholderText == 'Жанр' ? `?genre=${target}` : '') +
(placeholderText == 'Год релиза' ? `?releaseYear=${target}` : '')
)
Здесь target это значение только текущего поля, остальные поля игнорируются.
Строка собирается из трёх тернарных операторов, но только один из них сработает (тот, чей `placeholder` совпадает), и он добавит либо `?title=...`, либо `?genre=...`, либо `?releaseYear=...`.
Два других останутся пустыми.
В результате вы никогда не получите комбинацию параметров.
Как правильно реализовать
1. Дайте каждому полю ввода уникальный идентификатор
(например, `id="title"`, `id="genre"`, `id="releaseYear"`).
2. В обработчике input (или лучше в отдельной функции, вызываемой при любом изменении) прочитайте значения из всех полей.
3. Сформируйте объект с параметрами, отфильтруйте пустые значения, затем преобразуйте в строку запроса.
4. Выполните fetch с полученным URL.
Пример кода (упрощённый)
// html
<input id="title" placeholder="Название фильма">
<input id="genre" placeholder="Жанр">
<input id="releaseYear" placeholder="Год релиза">
// JS
const titleInput = document.getElementById('title');
const genreInput = document.getElementById('genre');
const yearInput = document.getElementById('releaseYear');
// Обработчик можно повесить на все поля сразу
document.querySelectorAll('input').forEach(input => {
input.addEventListener('input', performSearch);
});
async function performSearch() {
// Собираем значения
const title = titleInput.value.trim();
const genre = genreInput.value.trim();
const releaseYear = yearInput.value.trim();
// Строим объект параметров (только непустые)
const params = {};
if (title) params.title = title;
if (genre) params.genre = genre;
if (releaseYear) params.releaseYear = releaseYear;
// Если есть поле isWatched – добавьте его аналогично
// Преобразуем объект в строку запроса
const queryString = new URLSearchParams(params).toString();
const url = `https://sb-film.cc/films${queryString ? '?' + queryString : ''}`;
try {
const response = await fetch(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
"email": "ovikdevil@gmail.com",
}
});
const data = await response.json();
// обработайте данные...
} catch (error) {
console.error('Ошибка запроса:', error);
}
}