I have a kendoDropdownList that has virtualization. The list is created from a flat array such as ["a", "b", "c", "d"]. When I click on a value the list closes but it is not selected. Can you help? Here is my code.
var attributeValues = { age: ["1", "2", "3", "4", "5"],
name: ["John", "Jenny", "Suzie", "Lee", "Robert"]
};
createDropdownLists("name", "#myList");var shouldPreventOpen = [];var menuIsOpen = [];function createDropdownLists(key, selector) { shouldPreventOpen = []; let values = attributeValues[key]; if (values.length < 1) { $(selector).prop("disabled", true); } else { $(selector).prop("disabled", false); } $.each($(selector), function (index, element) { let value = $(element).val(); let valueIndex = values.findIndex((element) => element.toString() === value); $(element).kendoDropDownList({ height: 300, optionLabel: "Select Value", filter: "contains", //filterFields: ["itemName", "itemID"], template: "<div title='#: data #'><span class='listItemName' >#: data #</span></div>", //valueTemplate: "#: data #", virtual: { itemHeight: 44, valueMapper: function (options) { console.log(options, valueIndex); options.success([!isNaN(valueIndex) ? valueIndex : -1]); } }, dataSource: values, value: value, open: onOpen, close: onClose }); let id = $(element).attr("id"); shouldPreventOpen[id] = false; menuIsOpen[id] = false; let list = $(element).getKendoDropDownList(); list.wrapper.on("focus", function (e) { let id = $(e.currentTarget).find(".js-k-item-dropdown").attr("id"); if (shouldPreventOpen[id] && menuIsOpen[id]) { list.close(); shouldPreventOpen[id] = false; } else { list.open(); } }); }); $(".k-list-container").on("click", ".k-list-optionlabel, li", function (e) { let clickedId = $(e.currentTarget).closest(".k-list-container").attr("id"); clickedId = clickedId.substring(0, clickedId.indexOf("-")); let list = $(`#${clickedId}`).getKendoDropDownList(); list.close(); });}function onOpen(e) { let id = $(e.sender.element).attr("id"); if (shouldPreventOpen[id] && menuIsOpen[id]) { shouldPreventOpen[id] = false; e.preventDefault(); } else { shouldPreventOpen[id] = true; menuIsOpen[id] = true; }}function onClose(e) { let id = $(e.sender.element).attr("id"); if (shouldPreventOpen[id] && menuIsOpen[id]) { e.preventDefault(); } menuIsOpen[id] = false; $.each(shouldPreventOpen, function (element, index) { shouldPreventOpen[index] = false; });}