我有一个多选剑道,由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
答案 0 :(得分:3)
要记住两个问题:
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
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。之间保持松散的依赖关系。