最近常常遇到 PM 要求「下拉選單同時要有搜尋」的功能,之前在 Vue 裡面使用 V-select 套件來做,如果在原生的 JS 要寫這樣的功能,也找到 chosen.js 或 select2.js 這樣的套件可以做出這樣的功能。
剛開始我都以為「下拉選單同時要有搜尋」是使用<select>
表單元素去改的,但是在找資料的過程中,慢慢認知到可能不是用 select
,而是用 input
去改出這樣的效果。
HTML
CSS
CSS 部分儘量不做太多裝飾,不要混淆我們學習做這個功能的單純性。在這裡我會取消 input
的框線,用 input-div
包住它及放選項的 option
,偽裝成下拉選單。
當 user 點擊 input
的時候,option
加上 .active
樣式,露出下拉選單的選項。
改造的思路如下:
- 監聽
<input>
輸入框的點擊事件,下方要如同下拉選單一般呈現所有的選項。
- 監聽
<input>
輸入事件,篩選下拉選單中符合輸入「字串」的選項。
- 選取下拉選單中的選項,同時呈現在輸入框之中。
在 JS 中,我們先取得這幾個 DOM 元素及設定下拉選單的資料陣列:
選取下拉選單中的選項,同時呈現在輸入框之中
這個 function
要在 option
的選項組版時,放入 <li>
中。
完整 JS
參考資料: