Select2(バージョン4)をタグ付きで使用しており、選択した選択肢を入力フィールドの下に表示したいと思います。
したがって、代わりに:
むしろ持っている:
これは可能ですか?もしそうなら、どうすればそれを達成できますか?
編集:コードは:
<select class="js-example-tags form-control" multiple="multiple">
<option selected="selected">orange</option>
<option selected="selected">white</option>
<option selected="selected">purple</option>
<option selected="selected">red</option>
<option selected="selected">blue</option>
<option selected="selected">green</option>
</select>
そして
$(".js-example-tags").select2({
tags: true
})
要素がレンダリングされると、クラスを持つulが要素に追加されます。このクラス名は次のとおりです。_select2-selection__rendered
_つまり、レンダリングされた後、このクラスを取得してボトムを追加できるというのが私の考えでした。このために私は$(function()
を使用してJQueryを使用しました。これはすべてがロードされた後にロードするため、必要なjavascriptコードは次のようになります(テスト済み)。
Javascriptコード:
_ <script>
$(".js-example-tags").select2({
tags: true
});
$(function() {
//Here you add the bottom pixels you need. I added 200px.
$('.select2-selection__rendered').css({top:'200px',position:'relative'});
});
</script>
_
私は数週間前にこの質問に出くわし、他の回答が必要とするSelect2のスタイル変更のいくつかよりもリスクが少ないと感じた代替ソリューションを共有したいと思いました。
私たちのチームが最終的に使用したのは、基になる<select>
要素のchange
イベントをリッスンして、兄弟要素内のスタイル付きの順序付けされていないリストを構築/再構築するスクリプトでした。
$(".js-example-tags").select2({
tags: true
}).on('change', function() {
var $selected = $(this).find('option:selected');
var $container = $(this).siblings('.js-example-tags-container');
var $list = $('<ul>');
$selected.each(function(k, v) {
var $li = $('<li class="tag-selected"><a class="destroy-tag-selected">×</a>' + $(v).text() + '</li>');
$list.append($li);
});
$container.html('').append($list);
}).trigger('change');
また、select2タグの外観に加えて新しいリストに機能を与えるために、click
イベントをリッスンし、各リストアイテムを<select>
内の対応するoption
とペアにして選択した状態を切り替えて、change
イベントを再度トリガーします。
$selected.each(function(k, v) {
var $li = $('<li class="tag-selected"><a class="destroy-tag-selected">×</a>' + $(v).text() + '</li>');
$li.children('a.destroy-tag-selected')
.off('click.select2-copy')
.on('click.select2-copy', function(e) {
var $opt = $(this).data('select2-opt');
$opt.attr('selected', false);
$opt.parents('select').trigger('change');
}).data('select2-opt', $(v));
$list.append($li);
});
この後、display: none
を使用して.select2-selection__choice
要素を非表示にすることが問題になりました。
JQueryバージョン> 3では、属性$opt.prop('selected', false)
の代わりにプロパティを設定します。それ以外の場合は作成されたタグを削除しません。
完全な例はここでレビューできます: http://jsfiddle.net/tjnicolaides/ybneqdqa/ -これが他の誰かに役立つことを願っています。
同じニーズがあったので、Select2 v4で動作する カスタム選択アダプター を作成しました。
docs によると、Select2はアダプタパターンを使用するため、その機能を拡張するための推奨される方法は、独自のアダプタを実装することです。
SelectionAdapter
は、選択オプションの表示だけでなく、検索ボックスなど、コンテナ内に埋め込む必要のあるその他すべてのものを制御します。
Select2は、単一選択コントロールと複数選択コントロールのSelectionAdapterのデフォルトの実装として、それぞれSingleSelection
アダプターとMultipleSelection
アダプターを提供します。
選択アダプターは、カスタムアダプターをselectionAdapter
構成オプションに割り当てることでオーバーライドできます。
plugin の完全なコードは大きすぎて、ここに投稿できません。縮小されたのはわずか3kbです。 Select2メインjavascriptファイルの後に含める必要があります。
<script src="select2.js"></script>
<script src="select2.customSelectionAdapter.min.js"></script>
そしてcss:
<link rel="stylesheet" href="select2.customSelectionAdapter.css" />
次に、プラグインを次のように初期化します。
var CustomSelectionAdapter = $.fn.select2.AMD.require("select2/selection/customSelectionAdapter");
$("select").select2({
// other options
selectionAdapter: CustomSelectionAdapter
});
デフォルトでは、タグはselect2コンテナの直後に追加されます。 selectionContainer
オプションを使用して、ページ内の別の場所に追加できます。
$("select").select2({
// other options
selectionAdapter: CustomSelectionAdapter,
selectionContainer: $('.foo')
});
https://andreivictor.github.io/select2-customSelectionAdapter/
選択した回答についてコメントできないようです...しかし、ページに複数のselect2があり、これを1つだけにしたい場合はどうでしょうか。その1つとすべてを識別する信頼できる方法はありますか?