Search code examples
jquerykendo-uikendo-dropdownkendo-multiselect

Kendo UI - MultiSelect replace dynamically created dataSource from external file


How can I replace the Kendo UI MultiSelect dataSource values from external .js file...

PS: Actual values are coming from index.html file like below:

index.html

<select multiple="multiple" class="city_fields initi-select-218" id="test">
</select>

var data = [
     "New Jersey",
     "San Francisco",
     "Las Vegas",
     "Chicago",
     "Los Angeles",
     "New York"
];

jQuery(".city_fields").kendoMultiSelect({
  dataSource: data,
  filter: "contains",
});

Above values I am trying to replace from init.js (external) file as below...

init.js

Tried Option 1:

var newData = ["Delhi",  "Bangalore"];
jQuery(".initi-select-218").kendoMultiSelect({
    dataSource: newData,
    filter: "contains",
    placeholder: "Select",
});

Tried Option 2:

var newData = ["Delhi", "Bangalore"];
$("#test").kendoMultiSelect({
    dataSource: newData,
    filter: "contains",
    placeholder: "Select",
}); 
$("#test").setDataSource(new kendo.data.DataSource({ data: newData }));

Tried Option 3:

var newData = ["Delhi",  "Bangalore"];
var multiselect = $("#test").data("kendoMultiSelect");
multiselect.setDataSource(new kendo.data.DataSource({ data: newData }));

For Option 2 & 3, I am getting error as

Uncaught TypeError: $(...).setDataSource is not a function...

But still, it is taking the values from index.html file


Solution

  • It's because you have jquery selector by css class. kendo multiselect apply same classes to wrapper also.

    <div class="k-widget k-multiselect k-header city_fields initi-select-218" unselectable="on" title="" style="">
        ...
        <select multiple="multiple" class="city_fields initi-select-218" data-role="multiselect" aria-disabled="false" aria-readonly="false" style="display: none;">
            ...
        </select>
    </div>
    

    Use id attribute instead:

    <select id="multiselect" multiple="multiple" class="city_fields initi-select-218"></select>
    <script>
        $("#multiselect").kendoMultiSelect({...});
        var multiselect = $("#multiselect").data("kendoMultiSelect");
        ...
    </script>
    

    Update working example: http://dojo.telerik.com/iHoDU/2