環境
main @ 0c327f7,courses/gym,Chromium 141.0.7390.37 headless,1280×900。
現象
搜尋框在頁首、每個分頁都看得見,但結果只畫在「課程」分頁裡。
停在首頁或立場頁打字,畫面完全沒有變化;按 Enter 也沒有任何事發生。
使用者放棄搜尋、之後點進「課程」分頁時,才發現內容已經被那次看不見的輸入篩過了,
看起來像是分頁自己壞掉。
重現與實測
從 ?tab=home 進站,在頁首搜尋框輸入「深蹲」:
| 檢查點 |
結果 |
| 搜尋框在首頁可見 |
true |
| 打字後所在分頁 |
home(沒有變化) |
| 打字後 #main 可見 |
false(結果畫在看不見的地方) |
| 按 Enter 後所在分頁 |
home(Enter 沒有任何行為) |
| 之後點「課程」分頁:可見單元 |
23 / 全部 44 |
最後一列是重點:使用者以為搜尋沒作用,結果換分頁時內容已經少了一半。
根因
app.js:516-523 的 input handler 只做 applyFilters(),不管目前在哪個分頁;
也沒有 keydown handler,所以 Enter 落空。搜尋框的 DOM 位置(index.html:79,
在 header 內)意味著它是全站層級的控制項,但它作用的對象只在一個分頁裡渲染。
我的修法
打字與 Enter 都把人帶到結果所在的分頁
const revealResults = () => { if (state.query.trim() && state.tab !== "course") setTab("course");};searchInput.addEventListener("input", () => { … revealResults(); …});// 這個搜尋是邊打邊篩,本來就沒有「送出」;但使用者會按 Enter,// 什麼都不做會被讀成故障。讓它做唯一合理的事:把結果帶到眼前。searchInput.addEventListener("keydown", (e) => { if (e.key !== "Enter") return; e.preventDefault(); revealResults(); applyFilters(); searchInput.blur();});
環境
main@0c327f7,courses/gym,Chromium 141.0.7390.37 headless,1280×900。現象
搜尋框在頁首、每個分頁都看得見,但結果只畫在「課程」分頁裡。
停在首頁或立場頁打字,畫面完全沒有變化;按 Enter 也沒有任何事發生。
使用者放棄搜尋、之後點進「課程」分頁時,才發現內容已經被那次看不見的輸入篩過了,
看起來像是分頁自己壞掉。
重現與實測
從
?tab=home進站,在頁首搜尋框輸入「深蹲」:最後一列是重點:使用者以為搜尋沒作用,結果換分頁時內容已經少了一半。
根因
app.js:516-523的 input handler 只做applyFilters(),不管目前在哪個分頁; 也沒有keydownhandler,所以 Enter 落空。搜尋框的 DOM 位置(index.html:79, 在 header 內)意味著它是全站層級的控制項,但它作用的對象只在一個分頁裡渲染。我的修法
打字與 Enter 都把人帶到結果所在的分頁