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: '新增关键词',
})

tags.add('industrial display')
console.log(tags.values())

用户可按 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.