Skip to content

Tags Input API

createTagsInput() 不改變表單提交協定。原始 inputtextarea 仍保存序列化字串,標籤介面與其雙向同步;未執行 JavaScript 時,原控制項仍可正常編輯。

ts
import { createTagsInput } from 'sodialog'
import 'sodialog/style.css'

const source = document.querySelector<HTMLTextAreaElement>('#keywords')!
const tags = createTagsInput(source, {
  separators: [',', ';', ',', ';', '\n'],
  serializeWith: ',',
  maxTags: 20,
  inputAriaLabel: '新增關鍵字',
})

使用者可按 Enter 或分隔符確認標籤、貼上多項內容、按 Backspace 刪除最後一項,也可使用各標籤的移除按鈕。預設忽略大小寫重複項,並在失焦時確認尚未提交的文字。

Options

屬性預設值說明
separators[',', ';', ',', ';', '\n']輸入與貼上分隔符。
serializeWith','寫回原欄位時使用的分隔符。
maxTagsInfinity標籤數量上限。
allowDuplicatesfalse是否允許重複標籤。
caseSensitivefalse去重比較是否區分大小寫。
addOnBlur / addOnPastetrue是否在失焦時確認、是否拆分貼上內容。
placeholder原欄位的 placeholder可見輸入框的佔位文字。
inputAriaLabel原欄位 aria-labelAdd tag可見輸入框的可存取名稱。
removeButtonLabelRemove {value}(value: string) => string,移除按鈕的名稱。
validate-新增標籤前的驗證函式。
onChange-標籤變更回呼。

validate(value, values) 傳回 false 或錯誤文字會拒絕新增。onChange(values, handle) 於標籤變更後呼叫。

SoTagsInputHandleelementsourceinput 分別指向根節點、原欄位與可見輸入框;values() 傳回目前值的副本,setValues() 取代所有標籤,add()remove() 傳回是否變更,focus() 聚焦輸入框,destroy() 移除增強並還原原欄位。標籤變更會從原欄位送出 inputchangesod:tags-change,最後一個事件的 detail 包含 { values: string[] };外部程式更新原欄位後送出 input 可同步介面。原生表單重置會還原初始值。

元件指南 · 可執行範例

Released under the MIT License.