Я пытаюсь реализовать простой проект разбиения на страницы, пока я застрял с проблемой панели поиска.
Вот что я сделал на данный момент:
- 10 записей отображаются на одной странице
- мой скрипт может рассчитать общее количество ссылок на страницы на основе общегоколичество записей (студенты)
- Я могу посетить каждую страницу и просмотреть ее записи (скажем, страница 1: студенты от 0 до 9 ... страница 3: студенты от 30 до 39 и т. д.)
- Функция поиска
- Я специально отключил поиск по кнопке.Он доступен только для прослушивателя событий 'keyup'.
То, что мне пока не удалось реализовать:
При вводе поискового запроса: '/ 15' отображаются 2 страницы с соответствующими записями.Но затем, если я нажимаю на ссылку на странице 2, она отображает более 10 записей на страницу (параметр по умолчанию) и, возвращаясь к странице 1, возникает такая же ошибка.Я подозреваю, что ссылки на страницы получают неправильное значение откуда-то еще.Я попытался отладить, и кажется, что они получают значение из $ studentList (весь список студентов), но не из результатов поиска, которые я передаю.
В целом у меня есть 3 функции
function showPage(studentList, pageNum = 1){
const showPerPage = 10;
$(studentList).hide();
const calcStart = (pageNum) => pageNum === 1 ? 0 : (pageNum - 1) * showPerPage;
const start = calcStart(pageNum);
const end = pageNum * showPerPage;
$(studentList).slice(start,end).each(function(i, li){
$(li).fadeIn(50);
});
}
function appendPageLinks(studentList){
totalPageNum = Math.ceil(studentList.length / 10);
const pagination = 'pagination';
if($('.pagination').length === 0){
$('.page').append(`
<div class="${pagination}">
<ul></ul>
</div>
`);
}
$('.pagination ul').children().remove();
if (totalPageNum > 1){
for(let i=0; i<totalPageNum; i++){
const pageLink = `
<li>
<a href="#">${i + 1}</a>
</li>
`;
$('.pagination ul').append(pageLink);
}
}
$('.pagination ul li').children().first().addClass('active');
$('.pagination ul').on('click', 'a', function(e){
e.preventDefault();
const pgNum = parseInt($(e.target).text());
showPage(studentList, pgNum);
$(this).parent().siblings().children().removeClass('active');
$(this).addClass('active');
});
}
function searchStudent(element, filter){
$(element).each(function(){
if($(this).text().toUpperCase().includes(filter)){
$(this).show();
} else {
$(this).hide();
}
});
let num = $('.student-item:not([style*="display: none"])').length;
let searchRes = $('.student-item:not([style*="display: none"])');
num > 0 ? $('.notFound').hide() : $('.notFound').show();
return searchRes;
}
Я думаю, что эти слушатели событий не получают правильные значения:
$('.student-search input').on('keyup', function(){
const searchQuery = $(this).val();
const searchResults = searchStudent($('.student-list li'), searchQuery.toUpperCase());
showPage(searchResults);
appendPageLinks(searchResults);
});
Как и этот выше
$('.pagination ul').on('click', 'a', function(e)
Вот исходный код на codepen: https://codepen.io/hopper86/pen/WJmMMG?editors=1010
Если кто-то может подсказать, как исправить правильное обновление ссылок на странице.