kendo ui multiselect获取已选择的值的名称

时间:2014-02-20 17:17:15

标签: jquery kendo-ui telerik

我有一个多选剑道,由mvc中的控制器填充。

我在下拉列表中有一个选项是selectAll,当我选择该选项时,我清除所有其他选项,现在我想禁用下拉列表(但不是删除“全选”选项的选项。

如果我这样做

multiselect.enable(false) //i lose the option to delete the selected "Select All"

使用以下代码:当我选择“全选”选项时,我清除所有其他选项和剑道,只需选择所有选项。

 if (sel == 'Select All') {

        var name_Controller = $(e.item).parent().attr('id');

        var name_Controller = name_Controller.substr(0, name_Controller.indexOf('_'));

        var t = "#" + name_Controller;

        var required = $(t).data("kendoMultiSelect");

        required.value(""); // to clean 

现在..如何禁用其他选项,或者知道已选择的选项的名称,以便执行以下操作:

       if(required.contains("Select All")) //dont do nothing

required.val()doenst工作,因为这是在多个下拉列表中使用所有自动使用不同的id

3 个答案:

答案 0 :(得分:3)

要记住两个问题:

  1. 如何从列表中过滤选项:您应该使用filter
  2. 拦截change事件,以便您可以分析选择了哪些选项,如果选择“全选”,则过滤列表中的每个选项。
  3. 你应该做的是:

    var multi = $("#colors").kendoMultiSelect({
        dataSource: [
            { name: "Select All" },
            { name: "Red" },
            { name: "Green" },
            { name: "Blue" }
        ],
        dataTextField: "name",
        dataValueField: "name",
        change: function(e) {
            // Get selected options
            var values = this.value();
            if ($.inArray("Select All", values) != -1) {
                // If "Select All" is in the list
                // Remove other possibly selected options
                multi.value("Select All");
                // Remove any option from the datasource
                multi.dataSource.filter({ field : "name", operator : "eq", value : "Select All"});
            } else {
                // Clean filter
                multi.dataSource.filter({ });
            }
        }
    }).data("kendoMultiSelect");
    

    在此处查看:http://jsfiddle.net/OnaBai/9nVdq/6/

    编辑:如果您想要执行通用功能来处理“全部选择”,您应该将MultiSelects定义为:

    var multi = $("#colors").kendoMultiSelect({
        dataSource: colors,
        dataTextField: "name",
        dataValueField: "name",
        change: selectAll
    }).data("kendoMultiSelect");
    
    $("#cities").kendoMultiSelect({
        dataSource: cities,
        dataTextField: "name",
        dataValueField: "name",
        change: selectAll
    });
    

    和函数selectAll as:

    function selectAll(e) {
        // Get selected options
        var values = this.value();
        if ($.inArray("Select All", values) != -1) {
            // If "Select All" is in the list
            // Remove other possibly selected options
            this.value("Select All");
            // Remove any option from the datasource
            this.dataSource.filter({ field : "name", operator : "eq", value : "Select All"});
        } else {
            // Clean filter
            this.dataSource.filter({ });
        }
    }
    

    “技巧”是指this指的是当前multiselect

    在此处查看此行动:http://jsfiddle.net/OnaBai/9nVdq/8/

答案 1 :(得分:2)

可能是它的老帖子,但当我遇到类似的情况时,我找到了一个直接的解决方案。

$("#kendo-dropdown-id")。data(" kendoMultiSelect")。dataItems() 将为您提供从Kendo多选控件中选择的所有项目。

如果您有任何疑虑,请告诉我。

答案 2 :(得分:0)

一种不同的方法,而不是试图强制多项选择中的文本值。捕获数据绑定事件并获取整个数据源并将完整的数组存储在模型中。

然后,您可以使用所选值来查看您现在拥有的原始数据源的数据。这将允许您在viewModel和page。之间保持松散的依赖关系。