列表頁搜索後點擊「下一頁」,URL 無查詢參數導致返回第一頁數據。需在分頁鏈接中攜帶搜索條件。
// 1. 搜索按鈕點擊:序列化表單 → 拼接 URL → 跳轉
$("#search").click(function() {
const url = $(this).attr('url'); // 基礎列表頁 URL
let query = $('.search-form').find('input, select, textarea').serialize();
// 過濾空值參數
query = query.replace(/(&|^)([^=]+=)(&|$)/g, '$1') // 移除 key= 空值
.replace(/^&/, ''); // 移除首部 &
const separator = url.includes('?') ? '&' : '?';
window.location.href = url + separator + query;
});
// 2. 回車鍵觸發搜索
$(".search-form").keyup(function(e) {
if (e.keyCode === 13) { // Enter
$("#search").click();
return false;
}
});
分頁組件需感知當前查詢參數,生成帶條件的鏈接:
">
// 原生 JS,無需 jQuery
document.getElementById('search').addEventListener('click', () => {
const baseUrl = this.dataset.url;
const form = document.querySelector('.search-form');
const formData = new FormData(form);
const params = new URLSearchParams();
for (const [key, value] of formData) {
if (value.trim() !== '') params.append(key, value);
}
const url = new URL(baseUrl, window.location.origin);
url.search = params.toString();
location.href = url.toString();
});
// 回車搜索
document.querySelector('.search-form').addEventListener('keydown', (e) => {
if (e.key === 'Enter') {
e.preventDefault();
document.getElementById('search').click();
}
});
$_GET 參數,只替換頁碼參數。keydown 事件觸發搜索按鈕。URLSearchParams + URL API,無依賴、更健壯。