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

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

如果我做

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


使用下面的代码:当我选择“全选”选项时,我清除了所有其他选定的选项,并且kendo只是选中了“全选”选项。

 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()的确起作用,因为这会自动用于多个下拉列表中,且所有ID都不同

最佳答案

要记住两个问题:


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


您应该执行的操作如下:

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为:

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/

07-24 17:31
查看更多