Kendo MultiSelect make值被选中和禁用
Kendo MultiSelect make value to be selected and disable
这里需要帮助。我在这里创建了一个简单的演示,如果选择 checked='yes'
节点并从编辑中禁用(应用 k-state-disable),我想从 dataBound
实现什么。我尝试设置 (selected,true)
& (disabled,true)
但似乎不起作用。
<select id="multiselect"></select>
$("#multiselect").kendoMultiSelect({
dataSource: {
data: [
{id:1, Name: "John 1", checked: 'no'},
{id:2, Name: "John 2", checked: 'yes'},
{id:3, Name: "John 3", checked: 'no'},
{id:4, Name: "John 4", checked: 'yes'},
{id:5, Name: "John 5", checked: 'no'},
{id:6, Name: "John 6", checked: 'no'}
]
},
dataTextField: "Name",
dataValueField: "id",
dataBound: function(e) {
var multiselect = $("#multiselect").data("kendoMultiSelect");
var x = multiselect.dataSource.view();
for (var i = 0; i < x.length; i++) {
if (x[i].checked == "yes") {
//x[i].set("selected", true);
//x[i].set("disabled ", true);
//x[i].prop("disabled", true).addClass("k-state-disabled");
}
}
},
});
我想建议另一种方法来实现这一点。尽可能避免在 dataBound
中更改 DOM。所以我想建议使用 itemTemplate
option and select
事件:
您可以在 itemTemplate
选项中应用 .k-state-disabled
class:
itemTemplate: '<span # if (data.checked === "yes") { #class="k-state-disabled"# } #>#: Name #</span>'
这将使该选项看起来像被禁用。但是它仍然可以在列表中 select 它,所以你可以使用 select
事件来防止它:
select: function(e) {
if (e.dataItem.checked === 'yes') {
e.preventDefault();
}
},
在该事件中使用 e.preventDefault()
将阻止用户 select 使用符合条件的选项。
您需要处理 select
和 deselect
事件:
function onDeselect(e) {
if (e.dataItem.checked == 'yes') {
e.preventDefault();
}
}
function onSelect(e) {
if(e.dataItem.checked == 'yes') {
e.preventDefault();
}
};
$("#multiselect").kendoMultiSelect({
select: onSelect,
deselect: onDeselect,
//...
});
这里需要帮助。我在这里创建了一个简单的演示,如果选择 checked='yes'
节点并从编辑中禁用(应用 k-state-disable),我想从 dataBound
实现什么。我尝试设置 (selected,true)
& (disabled,true)
但似乎不起作用。
<select id="multiselect"></select>
$("#multiselect").kendoMultiSelect({
dataSource: {
data: [
{id:1, Name: "John 1", checked: 'no'},
{id:2, Name: "John 2", checked: 'yes'},
{id:3, Name: "John 3", checked: 'no'},
{id:4, Name: "John 4", checked: 'yes'},
{id:5, Name: "John 5", checked: 'no'},
{id:6, Name: "John 6", checked: 'no'}
]
},
dataTextField: "Name",
dataValueField: "id",
dataBound: function(e) {
var multiselect = $("#multiselect").data("kendoMultiSelect");
var x = multiselect.dataSource.view();
for (var i = 0; i < x.length; i++) {
if (x[i].checked == "yes") {
//x[i].set("selected", true);
//x[i].set("disabled ", true);
//x[i].prop("disabled", true).addClass("k-state-disabled");
}
}
},
});
我想建议另一种方法来实现这一点。尽可能避免在 dataBound
中更改 DOM。所以我想建议使用 itemTemplate
option and select
事件:
您可以在 itemTemplate
选项中应用 .k-state-disabled
class:
itemTemplate: '<span # if (data.checked === "yes") { #class="k-state-disabled"# } #>#: Name #</span>'
这将使该选项看起来像被禁用。但是它仍然可以在列表中 select 它,所以你可以使用 select
事件来防止它:
select: function(e) {
if (e.dataItem.checked === 'yes') {
e.preventDefault();
}
},
在该事件中使用 e.preventDefault()
将阻止用户 select 使用符合条件的选项。
您需要处理 select
和 deselect
事件:
function onDeselect(e) {
if (e.dataItem.checked == 'yes') {
e.preventDefault();
}
}
function onSelect(e) {
if(e.dataItem.checked == 'yes') {
e.preventDefault();
}
};
$("#multiselect").kendoMultiSelect({
select: onSelect,
deselect: onDeselect,
//...
});