標籤輸入框 - Tag Inputs

Valid keywords are: apple, lemon, love

1
2
<p>Valid keywords are: apple, lemon, love</p>
<div data-tag-input class="tag-input"></div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
export default function bindTagInput() {

  const { TagInput } = window.beyond

  const fruits = ['apple', 'lemon', 'love']

  const tagInputs = Array.from(document.querySelectorAll('[data-tag-input]'))
    .map(dom => {
      const tagInput = new TagInput(dom, {
        suggest(v) {
          if (v) {
            const fruid = fruits.find(f => f.startsWith(v))
            return fruid
          }
          return ''
        },
        validate(v) {
          if (fruits.includes(v)) {
            return { isTag: true, classname: 'tag-extra' }
          }
          return { isTag: false }
        },
        change(res) {
          console.log('change', res)
        }
      })

      return tagInput
    })

  return function unbindTagInput() {
    tagInputs.forEach(input => input.destroy())
  }
}

Tag Input

constructor

const tagInput = new TagInput(dom, options)
名稱 型別 說明 預設值
dom HTMLElement 需要設定成 TagInput 的元素
options object 選項 {}
options.suggest function | async function 是否要顯示輸入提示文字,有指定這個方法需回傳提示文字字串 () => ()
options.validate function | async function 驗證輸入的字串是否可以變為標籤,回傳物件 { isTag: Boolean },如果有指定標籤的 classname 可以回傳 { isTag: Boolean, classname: String } () => ({ isTag: true })
options.change function 標籤有異動時會呼叫這個 callback

addTag

新增標籤

tagInput.addTag({ text: 'something' })

destroy

移除 TagInput 產生的 dom 元素與 event listeners

tagInput.destroy()