TagInput

入力した文字をタグとして追加・解除します。

入力してEnterで追加できます。

タグを追加してください。

使いどころ

  • キーワードや分類など、利用者が自由に書いた短い言葉を複数付ける時に使います。
  • 決まった選択肢から複数選ぶ時は CheckboxGroup、多めの候補から打って探して選ぶ時は FilterMenu、一つの言葉に候補を添える時は Suggestion を使います。付いたタグを見せるだけなら Tag を並べます。

使い方

label と name を渡し、初めのタグを values に渡します。入力欄に言葉を打ってEnterを押すとタグになり、欄の下に解除ボタン付きの Tag として並びます。前後の空白は除きます。

空の言葉、カンマを含む言葉、既にあるタグは追加せず、欄の下に赤い小さな文字(11px)で理由を出します。

送信する値:タグを「, 」でつないだ一つの文字列(案内, 公開 など)を name で送ります。JavaScriptが無い時も同じ形です。サーバー側でカンマで分け、前後の空白を除いて使います。

required はタグが一つも無い時に送信を止めます。disabled は追加と解除を止め、値を送りません。help・error は Field と同じく欄の下に出して入力欄に関連付けます。フォームのリセットでは values の並びへ戻します。

タグの追加・解除の時は、取り消せる tag-input:beforeadd・tag-input:beforeremove と、その後の tag-input:add・tag-input:remove を発火します。並びが変わると全てのタグを渡す tag-field:change を発火し、送信フィールドにも標準の input・change を発火します。保存は利用側で行います。

外からタグを置き換える時は、tag-field のcontrollerの replaceValues(values) を呼びます。

JavaScriptが無い時は、カンマ区切りの一行の入力欄として送信します。

キーボード

TagInputのキーボード操作
キー動作
Enter(入力欄)入力した文字をタグにします。日本語の変換中のEnterは横取りしません。
←(入力欄の先頭)・Backspace(空の入力欄)最後のタグの解除ボタンへ移ります。
←・→(タグ)隣のタグへ移ります。最後のタグから先へ進むと入力欄へ戻ります。右から左に読む時は逆です。
Home・End(タグ)最初のタグ・入力欄へ移ります。
Delete・Backspace(タグ)そのタグを解除し、隣のタグへ移ります。

アクセシビリティ

  • 入力欄は label を名前にし、タグの一覧は「〜のタグ」の名前を持ちます。解除ボタンは「〜を解除」の名前を持ちます。
  • 追加できなかった理由は role="status" で知らせます。
  • required でタグが無い時は、入力欄の検証のメッセージ「タグを追加してください。」で送信を止めます。

イベント

TagInputが発火するイベント
イベント内容
tag-input:beforeaddEnterでタグを追加する前に発火します。取り消せます。detailは { value, reason } で、value は入力した文字です。
tag-input:addタグを追加した時に発火します。detailは tag-input:beforeadd と同じです。
tag-input:beforeremoveタグを解除する前に発火します。取り消せます。detailは { value, chip, reason } で、chip はそのタグの li、reason は pointer か keyboard です。
tag-input:removeタグを解除した時に発火します。detailは tag-input:beforeremove と同じです。
tag-field:changeタグの並びが変わった後に発火します。detailは { values } で、今のタグの配列です。

API

TagInput

自由入力のタグ。送信値はJavaScriptの有無にかかわらずカンマ区切り。

TagInputのprops
名前型既定値説明
idstring入力欄のID。ラベル・補足・エラー文のIDの接頭辞にも使う。渡さなければ自動で生成する。
label必須string欄の名前。タグの一覧の読み上げ名(「〜のタグ」)にも使う。
name必須stringタグを「, 」でつないだ一つの値を送るフィールドの名前。
valuesreadonly string[][]初期のタグ。前後の空白を除き、空・カンマを含むもの・重複は捨てる。フォームのリセットでこの並びへ戻る。
placeholderstring"入力してEnterで追加"入力欄のプレースホルダー。
helpstring欄の下に出す補足。入力欄のaria-describedbyに関連付ける。
errorstring欄の下に出すエラー文。入力欄をaria-invalidにする。検証は利用側で行う。
requiredbooleanタグが一つも無い時に送信を止める。
disabledboolean追加・解除を止め、値を送信しない。
formstring別の場所にあるformのID。

登録するcontroller:tag-input(TagInputController)、tag-field(TagFieldController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/button.css、components/field.css、components/icon.css、components/tag.css、components/tag-input.css

コード

HTML
Hono JSX