先從顧客任務判斷
顧客需要按不同條件比較同一批紀錄,排序才有明確用途。例如查送貨紀錄時,找最近包裹會想看日期由新至舊;核對月結單時,卻可能想由舊至新。預約列表按日期排列有用,按內部編號排列則未必有意義。先觀察幾個真實任務,問清楚換次序會否影響下一步。如果一種自然次序已能處理大部分情況,清楚標明預設順序通常比增加多個無用按鈕更易理解。
是否值得排序,與資料能否正確排序是兩個問題。價格欄可能混有優惠價、價格範圍及暫停供應的商品;直接比較畫面文字會得出誤導性的結果。日期可能以本地格式顯示,實際卻要按時間值比較。推出欄位按鈕前,應先定義空值、同值及不同單位的處理方式。顧客不應在點擊「價格由低至高」後,才發現系統其實按字母排列,或把沒有價格的商品當作零元。
讓控制方式及狀態清晰
W3C 的可排序表格範例保留一般 HTML 表格結構,並在可排序的欄標題內放置按鈕。這樣資料仍然是表格,操作部分則有按鈕原本具備的鍵盤行為。表格標題應說明內容;如有需要,補充指出哪些欄標題可以改變次序。不要只靠滑鼠點擊標題文字的事件來模仿按鈕。沒有合理排序方式的欄位應維持普通標題,不要加上暗示可操作的箭嘴。
排序後,畫面列次序必須與輔助技術讀出的狀態一致。W3C 範例把 aria-sort 放在目前排序的欄標題,按情況標示遞增或遞減;換了欄位就要移走舊標示並加到新欄。箭嘴只是視覺提示,不能作為唯一說明;方向應有可讀狀態,圖形亦要在不同色彩模式下可辨。重按同一欄是反轉方向還是循環返回預設次序,應先決定並一致執行。顧客要能知道目前依哪一欄及哪個方向排列。
先寫清楚排序規則
比較時應使用有類型的原始值,不要直接拿畫面上已格式化的字串比較。日期鍵應是真正日期或時間點;金額鍵須有明確幣別及價格基礎。若同一表格混合港元與其他貨幣,便要說明換算依據,否則不應提供單一價格排序。姓名及名稱的次序也要顧及顯示語言,不可假定英文的字母順序適合中文名稱。這些並非純技術細節,因為排序會改變顧客先看到哪些項目。
多筆紀錄的排序值相同時,應有固定的第二準則,避免每次操作後行次序無故跳動。例如顯示日期相同的訂單,可以保留原先相對次序,或按穩定的訂單識別值排列;選好規則便要可重現。沒有值的紀錄也要有明確位置,通常可放在已知值之後,並顯示「未提供」等標籤。反轉排序時,不要讓空值無聲無息跑到最前。若表格有篩選及分頁,還要說明排序適用於全部符合條件的紀錄,還是只適用於眼前一頁。
用具體情境檢查
假設顧客查看六筆服務預約:兩筆在同一天,一筆時間尚待確認;頁面起初顯示下一個預約在最前。顧客按日期標題,想由早到晚查看。系統以實際預約時間排已確認項目,按事先說明的規則放置未確認項目,時間相同時維持固定次序。表格標題指出內容是即將到來的預約;目前日期欄顯示遞增狀態,畫面上的各列也符合該狀態。系統先對全部篩選結果排序,再分頁,因此其他頁面的項目不會被漏在錯誤位置。
再用窄屏手機及鍵盤試同一任務。欄標題按鈕要有易點擊的範圍及清晰焦點,排序改變亦不能只靠彩色箭嘴表達。表格橫向捲動時,顧客仍要能把每筆預約對應到正確的列和欄。如設計把各列改成卡片,也要檢查排序選擇及目前狀態是否仍在卡片上方可見。手機版的排版可以不同,但排序控制所承諾的次序,以及參與排序的完整資料集合,不應因版面改變而變。
測試整段旅程並適時簡化
驗收不能只看資料列有否移動。由預設次序開始,用鍵盤啟動每個可排序欄位、反轉方向,再切換欄位;檢查頁面結構並以屏幕閱讀器確認只有目前欄位帶有正確的 aria-sort。完成篩選、換頁、用瀏覽器返回及切換語言後,也要再試。空結果、單筆資料、同值、空值及長名稱都應涵蓋。W3C 明言其範例屬示意用途,不同瀏覽器與輔助技術組合,尤其觸控裝置,仍需在正式使用前測試。
如果顧客主要只想找一個答案,搜尋或篩選可能比為密集表格增加排序更直接。找某張發票應可輸入發票號碼;要看哪些送貨仍未完成,可能需要狀態篩選。需要把多筆紀錄放在一起比較時,排序才特別有價值。上線後可留意客服問題及實際任務,但不能把箭嘴點擊次數當成排序有效的證明。真正要驗證的是不同裝置、不同輸入方式的顧客,能否準確找到並比較所需紀錄。
若表格由伺服器產生,而顧客有需要返回同一個比較結果,可把排序欄位及方向保存為可分享的頁面狀態。網址參數可以做到,但必須只接受預先核准的欄位與方向,不能任意轉成資料庫指令。若排序完全在瀏覽器執行,顧客開啟詳情再返回時,也應按任務需要保留選擇。無論用哪種方式,重新整理後的表格說明及目前欄位狀態都要反映實際次序。箭嘴還顯示舊方向、資料卻已返回預設次序,會比只提供固定順序更令人困惑。
排序與篩選同時使用時,值得獨立演練。假設零售商把服務列表篩成仍可預約的項目,再按最早日期排序,之後移除篩選。系統要決定日期次序是否仍套用於更大的資料集合,並清楚顯示結果。如果顧客正在比較各列時有新紀錄進來,自動重排可能令滑鼠下方的項目突然移位;顯示更新提示或由顧客主動刷新或許更安全。每列如有改期、取消等重要操作,這些細節會影響人是否選中正確紀錄。測試應包含真實的資料變動,不應只用不變的樣本。
每個可排序欄位都應有簡短驗收說明:它解答甚麼問題、比較哪個值、未知值放哪裏、同值如何處理,以及目前狀態如何在畫面和輔助技術中表達。這讓編輯和營運人員不必閱讀程式碼,也能檢查結果,並及早發現矛盾。例如「供應狀態」可能混合現貨、預購及庫存不明的商品,若未有清楚規則便不應承諾精確排序。語義不清時,先移除該選項,待業務定義完善再加回。少數誠實而有用的控制,比一個標籤過度承諾的萬能排序選單更好。
進行前先確認
- 先找出會因列次序改變而受影響的顧客任務。
- 開發前先定義值的類型、同值、空值、語言及分頁規則。
- 同時測試畫面次序、鍵盤操作及輔助技術讀出的排序狀態。


