2015-05-22 12 views
13

Sto usando Select2 (versione 4) con i tag e vorrei che le scelte selezionate fossero visualizzate sotto il campo di inserimento.Come visualizzare i tag selezionati in Select2 sotto il menu a discesa?

Così, invece di:

Standard choices

hanno Piuttosto:

enter image description here

Questo è possibile e se sì, come posso ottenere che?

EDIT: Codice è:

<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> 

e

$(".js-example-tags").select2({ 
tags: true 
}) 

risposta

2

Quando gli elementi vengono resi, viene aggiunto un ul con una classe per gli elementi. Questo nome classe è: select2-selection__rendered Quindi la mia idea era che dopo il rendering, potevo prendere questa classe e aggiungere un po 'di bottom. Per questo ho utilizzato JQuery utilizzando $(function() nota che quello che fa è di caricare dopo che tutto è stato caricato, quindi per il codice javascript necessario, è la seguente (testato):

codice

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> 
+0

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? –

+0

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. –

+0

Un miglioramento [jsfiddle] (http://jsfiddle.net/Mhluzi/q80ow33h/) per chiarezza. –

0

Non riesco a commentare la risposta selezionata ... ma per quanto riguarda i casi in cui sono presenti più select2 sulla pagina e voglio solo farlo a uno. c'è un modo affidabile per identificare quello contro tutti?

+0

Si potrebbe provare: $ ('# 2 .select2-selection__rendered') .css ({top: '100px', la posizione: 'relativa'}); $ ('# 2 .select2-container'). Append ("

"); Date un'occhiata a questo jsfiddle: http://jsfiddle.net/q80ow33h/12/ –

+0

Solo per chiarezza, nella risposta al di sopra del # 2 è l'id della vostra specifica select2 –

+0

Il problema che stavo avendo era che se si seleziona "multiple" la Select2 di rendering non riceve effettivamente un ID. Alla fine ho dovuto usare la funzione jQuery .next() e assumere (yikes) che select2 sarebbe sempre il controllo subito dopo l'originale 'select'. Quindi ho generato e impostato un ID su ciascun Select2, in base all'ID del 'select'. Ha sollevato un problema anche riguardo al git: https://github.com/select2/select2/issues/3447 – Denny

13

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.

+0

Ho provato ad applicare questo esempio ma non funziona per me. puoi controllare per favore http://stackoverflow.com/questions/35626836/jquery-select2-ajax-search-select-multiple – shorif2000

+0

url aggiornato http://stackoverflow.com/questions/35702152/jquery-select2-ajax-search-display-selected- result-in-another-div – shorif2000

+0

L'esempio funziona alla grande Se vedi che il contenitore selezionato è completamente vuoto, cosa succede se voglio visualizzare il segnaposto lì? –

Problemi correlati