2013-03-16 16 views
31

Ich muss ein Array von Daten nach der Initialisierung von select2 festlegen. Deshalb möchte ich, so etwas machen:Select2: Wie setze ich Daten nach Init?

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

Aber ich erhalte den folgenden Fehler:

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

Mein HTML:

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

Was soll ich anstelle eines select-Element verwenden?

Ich brauche die Quelle von Produkten für die Suche

+1

Was wollen Sie tun? 'data' dient zum Setzen ausgewählter Optionen (ich bin mir nicht sicher, ob Ihre Syntax auch korrekt ist), ein Select2' select' kann nur ein ausgewähltes Element haben, also verwenden Sie '.select2 ('val', optionValue)'. Wenn Sie mehrere ausgewählte Elemente benötigen, rufen Sie '.select2()' bei einer versteckten Eingabe oder eine Auswahl mit der Eigenschaft 'multiple' auf. Wenn Sie die Quelle der Elemente für die Suche festlegen möchten, ist das eine andere Sache. Geben Sie an, was Sie zu tun versuchen. –

+0

Ich muss ein neues Datenfeld für mein select2-Widget festlegen. Vielleicht .data() falls falsch. – Erik

+0

Ich bin auf der Suche nach etwas ähnlich wie die Methode setData. – Erik

Antwort

20

In onload zu setzen:

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

Ich persönlich würde '$ ('# selectId') bevorzugen. Append ($ .map (Daten, Funktion (v, i) {return $ ('

+2

Nachteil Ihrer Lösung ist die programmatische Einstellung der Daten ist kaputt. Irgendwelche Ideen, wie das zu beheben ist? BTW +1 zu Ihrer Lösung. – Matical

11

abgeben <input type="hidden"> Element und binden select2 darauf. Die Verwendung von .select2 in einem normalen Auswahlfeld lässt Sie nicht mit den Daten spielen, sondern gibt Ihnen nur die UI- und Nachauswahlmethoden an.

Quelle: Select2 Documentation

1

Ich hatte kürzlich das Szenario, in dem das Ändern eines select2-Objekts den Inhalt einer Sekunde (Eltern-Kind-Gruppierungen effektiv) ändert. Ich benutzte einen Ajax-Aufruf, um eine neue Menge von Json-Daten abzurufen, die dann vom zweiten select2-Objekt aufgenommen wurden. Ich habe den Code unten enthalten:

$("#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") 
      } 
     }); 
    }); 

Ich fand, dass ich das $ schließen musste („# groupchild“) html (‚‘), um den vorherigen Satz von Daten in der zweiten select2 zu räumen. . Hoffe das hilft.

0

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

Add item:

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

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

löschen Artikel:

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

Ich glaube, das löscht das SELECTED-Element, nicht die tatsächlichen Daten in der Liste? – Nick

Verwandte Themen