我正在使用Kendo multi select,但我无法获得选定的值
var multiselect = $("#SelectRoles").data("kendoMultiSelect");
var selectedData= [];
var items = multiselect.value();
for (var itm in items)
{
selectedData.push(itm);
}
但是array selectedData返回multiselect中的项目索引而不是值。
答案 0 :(得分:2)
使用另一个返回索引。
var multiselect = $("#SelectRoles").data("kendoMultiSelect");
var selectedData= [];
var items = multiselect.value();
for (var i=0;i<items.length;i++)
{
selectedData.push(items[i]);
}
答案 1 :(得分:2)
您还可以将从value()方法返回的数组直接分配给变量,例如:
var ms = $("#multiselect").kendoMultiSelect({
value: ["1", "2"]
}).data('kendoMultiSelect');
var selectedItems = ms.value();
console.log(selectedItems); // ["1", "2"]
答案 2 :(得分:1)
您的原始代码看起来没错。你确定你只获得指数吗?也许你应该发布你的MultiSelect代码。我发现了这个问题,因为我遇到了同样的问题并使用了其他答案作为参考,但我发现它们过于复杂。那么让我以另一种复杂的方式回答:)
这就是我所拥有的。我知道它的代码比你需要的多,但我认为在这里看到完整的图片非常重要。首先让我来说明一下。如果您多次使用它,则会出现Kendo()。MultiSelect.Name(“SomeName”)属性的问题。 “Name”不仅设置了html名称,还设置了id,并且你永远不会想要两个具有相同标识符的id。因此,在我的代码中,我将一个唯一的ID附加到我的MultiSelect.Name属性以确保唯一的ID。我将MultiSelect放在人员表的每一行中。我显示这是为了确保您使用DataValueField属性,以便您能够获取所选的值(而不是您在ui中看到的文本)。如果您只是显示一个没有id的文本值列表,那么这可能就是您获取错误数据的原因?
@foreach (var cm in Model.CaseMembers)
{
<tr>
<td>
@(Html.Kendo().MultiSelect()
.Name("IsDelegateFor" + cm.CaseMemberId)
.Placeholder("is a delegate for..")
.DataTextField("FullName")
.DataValueField("CaseMemberId")
.BindTo(Model.Attorneys)
)
</td>
</tr>
}
然后,在我的jQuery中,我尝试提取DataValueField(CaseMemberId),这是MultiSelect的选定值的数组......
var sRows = [];
$('#cmGrid tr').each(function () {
// 'this' is a tr
$tr = $(this);
// create an object that will hold my array of selected values (and other stuff)
var rec = {};
rec.IsADelegateFor = [];
// loop over all tds in current row
$('td', $tr).each(function (colIndex, col) {
if (colIndex === 3) {
// make sure our MultiSelect exists in this td
if ($(this).find("#IsDelegateFor" + rec.CaseMemberId).length) {
// it exists, so grab the array of selected ids and assign to our record array
rec.IsADelegateFor = $(this).find("#IsDelegateFor" + rec.CaseMemberId).data("kendoMultiSelect").value();
}
}
}
// add this tr to the collection
sRows.push(rec);
}
所以这是一个超级冗长的方式,说这个单行,正如其他人提到的那样完美地抓住了ID。无需迭代.value()数组并将内容推送到另一个数组!
rec.IsADelegateFor = $(this).find("#IsDelegateFor" + rec.CaseMemberId).data("kendoMultiSelect").value();
因此,在原始代码中,没有理由不能使用以下内容,
var multiselect = $("#SelectRoles").data("kendoMultiSelect");
var selectedData = [];
selectedData = multiselect.value();
console.log(selectedData);
除非
答案 3 :(得分:0)
volvox给出的解决方案有效。
以下是jquery版本,
var multiselect = $("#SelectRoles").data("kendoMultiSelect");
var selectedData= [];
var items = multiselect.value();
$.each(items ,function(i,v){
selectedData.push(v);
});
答案 4 :(得分:0)
var selected = $("#multi").data("kendoMultiSelect").value();