javascript - 使用 Tab 键进行剑道多选

标签 javascript jquery kendo-ui telerik kendo-multiselect

我正在尝试实现一项功能,通过服务器过滤在剑道的多选控件中选择一个项目。当用户在所选项目上按 Tab 时。这是我的 kepdown 事件代码:

if (e.keyCode === 9) {
       var selectedItem = multiSelect.current();

       if (selectedItem) {

            var selectedIndex = selectedItem.data("idx");

            if (selectedIndex >= 0) {

                var currentValue = multiSelect.value().slice();    
                var dataitems = multiSelect.dataSource.view();
                var selectedDataItem = dataitems[selectedIndex];

                multiSelect.dataSource.filter({});
                currentValue.push(selectedDataItem.relatedId);
                multiSelect.value(currentValue);

                multiSelect.trigger("change");
            }
         }
      }

但只要我在同一数据 View 中搜索,它就可以正常工作,也就是说,我选择两个以 Cloud 开头的值,然后选择一个以 App 开头的值,然后 kendo 将删除前两个以​​ Cloud 开头的值,并且控件将包含仅最后选择一个值。

我调试了kendo的代码,发现kendo的函数_index存在问题,因为它在dataSource.view中找到了值

我已在 http://dojo.telerik.com/OtAvi 重新创建了该问题

最佳答案

您的代码不起作用,因为您在数据源中将 serverFiltering 设置为 true:

dataSource: {
    type: "odata",
    serverFiltering: true,
    transport: {
        read: {
            url: "http://demos.telerik.com/kendo-ui/service/Northwind.svc/Products",
        }
    }
},

由于数据是在服务器上过滤的,因此调用 multiSelect.dataSource.filter({}); 仅清除已过滤的数据。话虽如此,当您调用 multiSelect.value(currentValue); 时,只能选择当前已过滤数据源中的值。这导致选择仅包含当前数据 View 中的项目。

除非您有充分的理由不这样做,否则最简单的解决方法是将 serverFiltering 设置为 false

关于javascript - 使用 Tab 键进行剑道多选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30600250/

相关文章:

javascript - 关于文本区域的更改 - ajax post

javascript - 单击页面加载时触发的功能?

javascript - 如何让KendoPanel的所有部分展开

javascript - 开发自定义剑道 ui 小部件

kendo-ui - 隐藏剑道上传按钮

javascript - 如何允许iframe访问Element.prototype

javascript - 用于打印功能的 jquery 在 asp.net 中不起作用

javascript - 将鼠标悬停在 plotly 上并出现一些图像

javascript - 在 javascript 中,子类中的字段初始化发生在父类中的构造函数完成之后。这是设计使然吗?

javascript - CSS 无法按 Angular 插值工作