2013-03-16 4 views
31

Je dois définir un tableau de données après l'initialisation de select2. Donc, je veux faire quelque chose comme ceci:Select2: comment paramétrer les données après init?

var select = $('#select').select2({}); 
select.data([ 
    {id: 1, text: 'value1'}, 
    {id: 1, text: 'value1'} 
]); 

Mais je reçois l'erreur suivante:

Option 'data' is not allowed for Select2 when attached to a element.;

Mon HTML:

<select id="select" class="chzn-select"></select> 

Que dois-je utiliser au lieu d'un élément de sélection?

J'ai besoin de définir la source d'articles pour la recherche

+1

Que voulez-vous faire? 'data' sert à paramétrer les options sélectionnées (je ne sais pas si votre syntaxe est correcte non plus), Select2' select' ne peut avoir qu'un élément sélectionné donc vous utilisez '.select2 ('val', optionValue)'. Si vous avez besoin de plusieurs éléments sélectionnés, vous appelez '.select2()' sur une entrée cachée ou un select avec la propriété 'multiple'. Si vous voulez définir la source des éléments pour la recherche, c'est une chose différente. Précisez ce que vous essayez de faire. –

+0

Je dois définir un nouveau tableau de données pour mon widget select2. Peut-être que .data() si c'est faux. – Erik

+0

Je cherche quelque chose de similaire à la méthode setData. – Erik

Répondre

20

En onload:

$.each(data, function(index, value) { 
    $('#selectId').append(
    '<option value="' + data[index].id + '">' + data[index].value1 + '</option>' 
); 
}); 
+12

Personnellement, je préfèrerais '$ ('# selectId'). Append ($ .map (données, fonction (v, i) {return $ ('

+2

L'inconvénient de votre solution est que le paramétrage programmatique des données est cassé. Une idée de comment réparer ça? Btw +1 à votre solution. – Matical

11

Faire un élément <input type="hidden"> et lier select2 à cela. L'utilisation de .select2 sur une case de sélection normale ne vous permet pas de jouer avec les données, cela vous donne principalement les méthodes d'interface utilisateur et de post-sélection.

Source: Select2 Documentation

1

J'ai récemment eu le scénario où la modification d'un objet select2 modifie le contenu d'un second (regroupement parent-enfant). J'ai utilisé un appel ajax pour récupérer un nouvel ensemble de données Json, qui a ensuite été récupéré par le second objet select2. J'ai inclus le code ci-dessous:

$("#group").on('change', function() { 
     var uri = "/Url/RetrieveNewResults"; 
     $.ajax({ 
      url: uri, 
      data: { 
       format: 'json', 
       Id: $("#group :selected").val() 
      }, 
      type: "POST", 
      success: function (data) { 
       $("#groupchild").html(''); 
       $("#groupchild").select2({ 
        data: data, 
        theme: 'bootstrap', 
        placeholder: "Select a Type" 
       }); 
      }, 
      error: function() { 
       console.log("Error") 
      } 
     }); 
    }); 

Je trouve que je devais inclure le $ (« # groupchild ») html (« ») pour effacer l'ensemble des données précédentes dans la deuxième select2. . J'espère que cela t'aides.

0

Source: https://select2.org/programmatic-control/add-select-clear-items

Ajouter un élément:

var data = { 
    id: 1, 
    text: 'Barn owl' 
}; 

var newOption = new Option(data.text, data.id, false, false); 
$('#mySelect2').append(newOption).trigger('change'); 

objets clairs:

$('#mySelect2').val(null).trigger('change'); 
+0

Je crois que efface l'élément sélectionné, pas les données réelles dans la liste? – Nick

Questions connexes