Mi sono imbattuto in questa domanda poche settimane fa e volevo condividere una soluzione alternativa che ritenevo avesse meno rischi di alcune delle modifiche di stile a Select2 richieste da altre risposte.
Cosa nostra squadra ha finito per usare è stato uno script che ascoltò il change
evento del sottostante <select>
elemento per costruire/ricostruire una lista non ordinata stile in un elemento di pari livello:
$(".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');
E, per dare al nuovo elencare la funzionalità oltre alla comparsa dei tag Select2, abbiamo ascoltato per un evento click
e associato ogni elemento nell'elenco con il corrispondente option
nella <select>
quindi potrebbe cambiare lo stato selezionato e attivare nuovamente l'evento 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);
});
Dopo questo, era questione di usare display: none
per nascondere gli elementi .select2-selection__choice
.
L'esempio completo è disponibile per la revisione qui: http://jsfiddle.net/tjnicolaides/ybneqdqa/ - spero che questo aiuti qualcun altro.
fonte
2015-12-07 17:52:11
grazie, questo è fantastico e quasi per me ..... un aspetto su questo è che se ci sono elementi sotto il menu a discesa il display diventa un po 'confuso con i tag selezionati posizionati sotto i seguenti elementi. C'è un modo per "espandere automaticamente" l'altezza dell'ulteriore ul in base a quante scelte ci sono? –
Ho creato un [jsfiddle] (http: // jsfiddle.net/Mhluzi/q80ow33h/1 /) per dimostrare cosa intendevo nel commento sopra: Fondamentalmente vorrei poter posizionare i risultati sotto ogni dropdown pertinente. –
Un miglioramento [jsfiddle] (http://jsfiddle.net/Mhluzi/q80ow33h/) per chiarezza. –