iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
Vibe Coding

看得懂、叫得出、驗得過:30 天 VibeCoding UI 元件實戰系列 第 7

Day 7|別再把所有下拉都叫 Dropdown:從 Select 到 Multi-select 的選型指南

  • 分享至 

  • xImage
  •  

安安~我是ChiYu~

昨天把通知設定拆成 Checkbox、Radio 與 Switch 後,邀請成員流程只剩兩個欄位:「所屬部門」和「協作者」。

部門要能搜尋,但只能從既有資料選一筆;協作者同樣要搜尋,卻可以留下多筆結果。AI 第一版很乾脆,兩個欄位都做成「可以搜尋、可以多選,也可以自己輸入」的 Dropdown。

先看所屬部門:

模糊 Prompt 產生的第一版可搜尋下拉選單

圖 1:輸入框與候選清單都有出現,資料邊界、選取結果和非理想狀態則全部缺席。

原始實驗在 2026 年 7 月 23 日執行,使用 Codex Desktop、GPT-5、相同的六筆虛構部門資料,以及 Astro/TypeScript 環境。整理文章時,我又在 7 月 27 日用原始 Prompt 重跑這張基準,沒有追加任何說明:

幫我做一個好用、漂亮、可以搜尋的下拉選單。

一顆元件包辦所有能力,聽起來很省事。實際上,每多塞一種能力,就多一條還沒說清楚的資料規則:輸入的文字算搜尋條件,還是新資料?按下 Enter 是選取,還是建立?多選後的值又放在哪裡?

按下 Enter,是選取「研究組」,還是建立一個新部門?

我在第一版輸入「研究」,畫面確實列出「研究組」。

接著才是麻煩。按下 Enter 後,它應該選取 API 裡既有的「研究組」,還是替系統建立一個叫「研究」的新部門?原始需求沒說,畫面也沒回答。

載入中、無結果、失敗與停用同樣不存在。只看靜態截圖,很容易把「有輸入框、有清單」當成完成版;真的要把值送進系統時,資料契約才開始追著我們問答案。

這次我的選擇很明確:所屬部門使用只能選既有值的可編輯 Combobox。管理員可以輸入關鍵字,但最後只能提交 API 裡既有的一個部門。這條規則排除了自由文字,也排除了不方便搜尋大量資料的普通 Select。

Combobox 並不是天生只能選既有值。W3C 的模式同時涵蓋可自由輸入,以及只能從允許值中選擇的做法;Autocomplete 則描述候選值如何隨輸入出現。這篇把幾個名稱拆開,是為了讓 Prompt 比較好說,不代表所有設計系統都會用完全相同的方式切界線。

先寫三條資料契約,再替「下拉選單」選名字

遇到 Dropdown 需求時,我會先問三件事:

  1. 輸入是在查資料,還是建立資料?
  2. 最後的值是否必須來自系統?
  3. 一次要留下幾筆?

答案寫出來,Select、Listbox、Combobox、Autocomplete 與 Multi-select 才有辦法分工。

使用情境 適合的元件 需要先說清楚的資料規則
選項不多,只選一筆既有值 Select 不需要輸入或搜尋,答案來自固定選項。
選項直接留在畫面上供人瀏覽 Listbox 選項、焦點與目前值都持續可見。
可輸入關鍵字,並開啟候選清單 Combobox 先決定候選是建議值還是唯一允許值;本篇部門欄只收既有資料。
輸入途中提供候選建議 Autocomplete 行為 必須另外決定能否保留候選清單以外的文字,以及採手動或自動完成。
需要同時選取多筆 Multi-select 模式 可由多選 Listbox 或可搜尋的多選 Combobox 組成;已選內容、移除方式與數量上限都要看得見。

「可搜尋」只回答怎麼找到資料;「可多選」決定要保留幾筆;「可自建」則會直接改變資料來源。把三句混成「做一個厲害的 Dropdown」,AI 只能把功能當自助餐往裡面裝。

我把這組判斷整理在 Select、Combobox、Autocomplete 完整比較頁

選擇與輸入元件比較頁:先用四個問題排除錯誤選項

圖 2:確認能否輸入、是否只能選既有資料、能不能建立新值,以及一次選幾筆後,五種選項已經不再是同一顆 Dropdown。

如果還在兩三個候選之間猶豫,再沿著這張圖走一次:

選擇元件的判斷地圖

圖 3:是否需要輸入、值是否受限,以及單選或多選,是排除錯誤元件的三個主要分岔點。

單選既有值:選項少用 Select,資料多再交給 Combobox

Select 讓人直接挑一個固定答案

Select|選擇器 適合選項少、內容一眼能掃完,而且只需要一筆既有值的情境,例如所屬校區或表單語言。

Vibe UI Atlas 的 Select 實際 Demo:從少量固定角色中選一個

圖 4:選項數量少時,Select 讓使用者直接挑一個答案,不必先輸入關鍵字。

如果選項有上百筆,硬塞進 Select 只會讓人一直滑。這時增加搜尋也不是替 Select 裝一個放大鏡就好,焦點、候選清單與鍵盤行為都要一起處理,Combobox 會比較合適。

Combobox 可以搜尋,但最後仍只收既有部門

Combobox|組合式選擇框 可以做成 select-only,也可以允許輸入文字。LumenDesk 的所屬部門採用可搜尋、單選,而且只接受既有部門的版本。

我在 Demo 輸入「研究」,按方向鍵往下,再按 Enter,最後選到既有的「研究組」。

UI 元件百科的 Combobox 實際操作畫面

圖 5:輸入「研究」後顯示既有候選項目;方向鍵移動焦點,Enter 才完成選取。

接著我改輸入不存在的名稱。畫面進入無結果,沒有默默把自由文字升格成新部門;按 Reset 後又能回到初始狀態。

Combobox 的互動契約

圖 6:輸入、候選清單、目前值與鍵盤操作要一起設計,少一塊都會留下猜測。

這三步就是我對這次 Combobox 的基本驗收:輸入只負責縮小既有資料、不碰滑鼠也能選取、無結果與重設都有明確回應。載入失敗和停用也不能只存在 Prompt 裡。

選項要常駐、提供建議或保留多筆,責任又不一樣

Listbox 把選項留在畫面上

Listbox|選項清單 適合權限清單、篩選側欄,或需要直接瀏覽的選取清單。

Vibe UI Atlas 的 Listbox 實際 Demo:選項直接留在畫面上供使用者瀏覽

圖 7:候選項目持續可見,使用者能同時看到焦點位置與目前選取值。

它的優勢正是不用每次展開才看得到選項。反過來,資料多到必須輸入關鍵字才能找到時,單靠 Listbox 就不夠。

Autocomplete 提供建議,不會替產品決定能否自由輸入

Autocomplete|自動完成 會在輸入途中提供候選建議,常見於收件者、地點或文章標籤。它比較像輸入與候選清單的行為模式,不一定是和 Combobox 完全分離的另一顆元件。

Vibe UI Atlas 的 Autocomplete 實際 Demo:輸入關鍵字後提供候選建議

圖 8:Autocomplete 幫使用者縮小輸入範圍,但候選清單以外的文字能不能留下,仍要由需求決定。

建議從哪裡來?沒選建議時能不能送出?這兩題若沒有答案,它可能接近受限資料的 Combobox,也可能只是一般 Text Field 的輸入輔助。

Multi-select 要讓已選內容留在畫面上

Multi-select|多選選擇器 適合指派多個標籤或邀請多位協作者。它可以是持續展開的多選 Listbox,也可以是搜尋後把已選值顯示成 Chip 的 Combobox;LumenDesk 的協作者欄位採用後者。

Vibe UI Atlas 的 Multi-select 實際 Demo:同時選取多位協作者並保留已選項目

圖 9:已選協作者留在欄位附近,每一筆都有清楚移除方式,也能看見選取上限。

只在展開清單裡打勾不夠。清單收起來後,使用者仍要知道自己選了誰、如何移除其中一筆,以及還能再選幾位。若最後只需要一個部門,就不要讓單選欄位背著整套多選狀態到處跑。

這次只改「所屬部門」,Prompt 也只寫一個 Combobox

把五種名稱都塞進同一份 Prompt,看起來很完整,卻容易把今天真正要修的欄位淹沒。這次我只處理所屬部門:

建立一個單選 Combobox,讓工作區管理員從既有部門中搜尋並選取一項。

資料由 API 載入,不可自行新增部門。輸入關鍵字時篩選選項;
方向鍵移動候選項、Enter 選取、Escape 關閉。

提供 Default、Selected、Loading、Empty、Error、Disabled 與 Reset。
360px 下仍要看得到 Label、選取值與錯誤訊息。
使用可見 Label、combobox/listbox 語意、清楚 Focus 與狀態訊息。

驗收:不用滑鼠也能搜尋並選到既有部門;載入失敗時能理解問題並重試。

第二版輸入「研究」後按方向鍵與 Enter,值會成為「研究組」並收合清單。輸入不存在的內容則進入無結果,不會偷偷建立新部門;Reset 能回到初始狀態,切到 Disabled 時也不會留下仍可操作的清單。

這次仍有三件事不能蓋章:

  • Demo 使用靜態資料,沒有真實 API 延遲與權限。
  • 尚未使用螢幕閱讀器實聽。
  • 200% 縮放還沒列入阻擋條件。

所以我可以說鍵盤流程與 360px 已通過,不能把所有使用方式一起包成「驗證完成」。

邀請流程走完後,下一張表單開始和數字過不去

回到這幾天一直處理的邀請流程:使用者先用 Link 查看權限說明,接著填帳號與備註、選擇通知方式,再用 Combobox 從既有部門選到「研究組」。若要加入多位協作者,欄位改用 Multi-select,已選的人會留在畫面上。最後按下送出;失敗時資料保留,成功後才關閉 Dialog。

這是 LumenDesk 第一條走通的完整任務,後台當然還沒做完。

新團隊接著要建立內部活動。預算是 48,000 元、配送距離要微調、餐點數量要增減,活動結束後還得留下滿意度。全部都是數字,AI 很自然地送它們一人一條 Slider。

AI 第一版把預算、人數、距離、餐點與滿意度全部做成 Slider

圖 10:五個數字都有顯示,卻只能靠拖曳修改。精確預算、少量餐點與主觀評價暫時被當成同一份工作。

明天要處理的不是 Slider 的配色,而是這五個數字究竟要多精確,又該用什麼方式修改。

參考資料與查閱日期

資料查閱:2026-08-07。


上一篇
Day 6|五種選擇控制怎麼分?Checkbox、Radio、Switch、Toggle Button 與 Segmented Control
下一篇
Day 8|數值要輸入、拖曳還是評分?六種數值控制的選型
系列文
看得懂、叫得出、驗得過:30 天 VibeCoding UI 元件實戰24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言