I this json response from an API.
{"first_name":"Person 1","last_name":"Person 1","email":"[email protected]","role":2,"properties":[1,2]}
And the following coreui element:
<select id="edit_properties" name="multi-select-edit_properties" multiple="" data-coreui-search="true" tabindex="-1" style="display: none;">
<option value="1">consequatur</option>
<option value="2">dolore</option>
<option value="3">ab</option>
<option value="4">eum</option>
<option value="5">maxime</option>
</select>
I tried using this jquery code:
$("#edit_properties").val([data.properties]);
No errors in console, and the select element does not set selected values.
CodePudding user response:
In order for the multi-select to render pre-selected values, each option must have an extra attribute selected="selected"
.
<select id="edit_properties" name="multi-select-edit_properties" multiple="" data-coreui-search="true" tabindex="-1" style="display: none;">
<option value="1" selected="selected">consequatur</option>
<option value="2" selected="selected">dolore</option>
<option value="3">ab</option>
<option value="4">eum</option>
<option value="5">maxime</option>
</select>
You can achieve this by adding the selected
attribute programmatically, when you get the response from the API.
For example
var response = JSON.parse('{"first_name":"Person 1","last_name":"Person 1","email":"[email protected]","role":2,"properties":[1,2]}');
// Get the reference of the html element using the coreui js API
var multiselect = coreui.MultiSelect.getInstance(document.querySelector("#edit_properties"));
response.properties.forEach(function(elem) {
document.querySelector(`#edit_properties option[value='${elem}']`).setAttribute("selected", "selected")
});
// update the element to render the selected options
multiselect.update();
Useful links: