如何在Kendo Multiselect数据源仅含一项时设置默认选中值?
解决Kendo Multiselect在dataBound时自动选中唯一项的问题
哦,这个问题我之前也碰到过!Kendo的Multiselect和ComboBox的select()方法确实有差异——ComboBox支持直接传入数字索引来选中项,但Multiselect的select() API并不接受索引参数,而是需要传入要选中项的DOM元素或jQuery对象,或者更简单的用value()方法来设置选中值。
给你两种可行的实现方案:
方案一:使用value()方法(推荐)
Multiselect的value()方法接受一个数组作为参数(因为它支持多选),我们只需要把唯一那项的value值放进数组里即可:
function onDataBound() { var ds = this.dataSource.data(); if (ds.length === 1) { // 注意:这里的"value"要替换成你数据源中实际的value字段名(比如"id") var selectedValue = [ds[0].value]; this.value(selectedValue); // 如果需要触发change事件(比如关联了其他联动逻辑),可以加上这句 this.trigger("change"); } }
方案二:使用select()方法(通过DOM元素选中)
如果你更倾向于用select()方法,可以先获取到对应项的DOM元素,再传给select():
function onDataBound() { var ds = this.dataSource.data(); if (ds.length === 1) { // 获取第一个选项的DOM元素 var targetItem = this.items().eq(0); this.select(targetItem); // 可选:触发change事件 this.trigger("change"); } }
小提示
- 记得替换代码中
ds[0].value里的value为你数据源实际的字段名(比如你的数据项是{ id: 1, text: "选项1" },就改成ds[0].id)。 - 如果你的业务逻辑不需要在选中时触发
change事件,可以去掉this.trigger("change")这句。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

