J'utilise le génial select2 pour créer un combo à sélection multiple.
Je voudrais par programme sélectionner les valeurs par défaut (comme dans les sélections que l'utilisateur a déjà faites), mais je ne sais pas comment. J'ai lu qu'initSelection était efficace, mais on l'appelle lors de la création du combo et je ne veux pas que cette sélection par défaut soit toujours effectuée.
bonne solution dans la version 4.x par exemple:
$('#element').val(['val1','val2']).trigger('change');
voir: Description du créateur
J'ai trouvé des solutions, cela vous aidera peut-être:
$('#el').select2({...}) // init select2
var defaultData = [{id:1, text:'Item1'},{id:2,text:'Item2'},{id:3,text:'Item3'}];
$('#el').data().select2.updateSelection(defaultData);
Comme indiqué dans la documentation ici , vous pouvez simplement ajouter des "options" à votre balise sélectionnée afin de présélectionner les valeurs par défaut initiales.
<select class="js-data-example-ajax">
<option value="3620194" selected="selected">select2/select2</option>
</select>
Depuis la page de documentation:
" val - Obtient ou définit la sélection. Si le paramètre value n'est pas spécifié, l'attribut id de l'élément actuellement sélectionné est renvoyé. Si le paramètre value est spécifié, il devient la sélection actuelle."
Aussi, à partir de la documentation:
$("#e8").select2("val", "CA");
J'ai parcouru un tableau de valeurs, puis définissez chaque option correspondant à ("selected", true)
values = [2, 5, 3]
for val in values
$("#selects_id option[value="+val+"]").prop("selected",true).trigger("change")
Vous pouvez également utiliser les résultats d'un appel Ajax.
Je l'ai compris finalement !! Select2 itère à travers la balise <option>
sous le <select>
.
<select class="js-data-example-ajax" style="width:100%">
<option value="3620194" selected="selected">Put the pre-selected options here</option>
</select>
Le code HTML interne du <option>
est placé dans l'objet repo sous la clé de texte. Donc repo.text
donnera le innerhtml. Autrement dit, tout ce que nous avons à faire est de fournir repo.text
à l’option formatSelection
dans init. De plus, le json transmis par le servlet (contrôleur) doit avoir le texte d'étiquette souhaité placé sous la clé text
! Je cherche toujours comment ajouter des attributs aux éléments li créés pour pouvoir sauvegarder la liste modifiée. Des idées?
Le code suivant fonctionne bien, mais le select2
doit être actualisé.
$('#el').data().select2.updateSelection(defaultData);
Pour prolonger @sanj, réponse ..__ Cela semble fonctionner pour moi dans mes projets.
Via HTML
HTML
<select class="select2" style='width:100%;' multiple>
<option val=''>Please choose</option>
<option val="1" selected>One</option>
<option val="2" selected>Two</option>
<option val="3">Three</option>
</select>
JS
$('.select2').select2();
Via Javascript
HTML
<select class="select2" style='width:100%;' multiple>
<option val=''>Please choose</option>
<option val="1">One</option>
<option val="2">Two</option>
<option val="3">Three</option>
</select>
JS
$('.select2').select2();
var defaultData = [{id:1, text:'One'},{id:2,text:'Two'}];
$('.select2').data().select2.updateSelection(defaultData);