jQuery Select2 で動的に選択肢を追加する
はじめに
jQuery Select2 で、選択肢に存在しない情報を動的に追加する方法を調べた。
ユーザー入力で一致する選択肢がある場合は既存選択肢を、そうでなければユーザー入力をそのまま選択肢として追加する、というイメージ。
TL;DR
tags: trueを指定すると選択肢を動的に追加できるcreateTagで選択肢追加時の挙動を制御できるmultipleの場合は複数選択しを追加できる
目次
環境・条件
詳細
tags オプションを使うことで、動的に選択肢を追加できる
参考: Dynamic option creation | Select2
動作イメージ
tags(single)
tags: true で指定するだけで良い。
1 | $("select.select2").select2({ |
ユーザー入力で候補を絞り込んで、「存在するものであれば既存選択肢を使用」「存在しなければ選択肢を追加」という挙動になる。
ちなみにデフォルトだと以下のように value=<user input> の <option> が追加される。
1 | <select> |
tags(multiple)
tags: true + multiple: true(もしくは <select multiple>)で新規選択肢を複数追加できるようになる。
1 | $("select.select2").select2({ |
追加時の挙動は Single の場合と同じ。
1 | <select> |
createTag で追加情報の制御
createTag オプションで {id: n, text: xxxx} を返却する関数を指定すると、<option value="n">xxxx</option> として選択肢を追加できる。
createTag は選択肢追加時の詳細設定。何も指定しない場合は <option value="banana">banana</option> のように選択肢が追加される。
1 | $("select.dynamic-option-create-createTag").select2({ |
abcde という入力で選択肢を追加した場合、下記内容で <option> が追加される。
1 | <option value="5">abcde</option> |
tokenSeparators で選択肢追加キーの設定
tokenSeparators オプションで選択肢の区切り文字を設定できる。
tokenSeparators: [','] で、キー入力が banana, apple, の場合は banana, apple がカンマ(,)を入力した時点で選択肢として追加される。
※multiple 有効なら banana と apple がそれぞれ追加され、そうでなければ(banana は上書きされて)apple が追加された状態となる。
tokenSeparators: [',', ' '] としている場合、半角スペース()入力で選択肢が追加される挙動となるので注意が必要。
1 | $("select.dynamic-option-create-createTag").select2({ |
まとめ
tags: trueを指定すると選択肢を動的に追加できるcreateTagで選択肢追加時の挙動を制御できるmultipleの場合は複数選択しを追加できる
参考文献
- Dynamic option creation | Select2 - The jQuery replacement for select boxes
- javascript - Tagging with AJAX in select2 - Stack Overflow
関連記事
- jQuery Select2 で、初期値の設定と選択状態のクリア
- jQuery Select2 で ajax を使って選択肢を取得する
- jQuery Select2 で上限ありの複数選択
- Lozad.js で Lazy Load (非 jQuery)
- JavaScript で画像をローカルにダウンロード
- JavaScript で複数画像を zip に圧縮してローカルにダウンロード
- JavaScript で URL のクエリパラメータを操作する方法
- axios で添付ファイルありのリクエスト(multipart/form-data の POST)