jquery 如何获得选择的剑道多选择值?

bweufnob  于 2023-04-29  发布在  jQuery
关注(0)|答案(6)|浏览(123)

我正在使用Kendo多选如下,但我不能得到选定的值

var multiselect = $("#SelectRoles").data("kendoMultiSelect");
var selectedData= [];
var items = multiselect.value();
for (var itm in items)
{
   selectedData.push(itm);
}

但是array selectedData返回multiselect中的项的索引而不是值。

qzlgjiam

qzlgjiam1#

您也可以将value()方法返回的数组直接赋给变量e。例如:

var ms = $("#multiselect").kendoMultiSelect({
  value: ["1", "2"]
}).data('kendoMultiSelect');

var selectedItems = ms.value();
console.log(selectedItems); // ["1", "2"]
oipij1gg

oipij1gg2#

使用另一个返回索引。

var multiselect = $("#SelectRoles").data("kendoMultiSelect");
var selectedData= [];
var items = multiselect.value();
for (var i=0;i<items.length;i++)
{
   selectedData.push(items[i]);
}
vxf3dgd4

vxf3dgd43#

你的原始代码看起来没有错。您确定您只获取索引吗?也许你也应该发布你的MultiSelect代码。我发现这个问题是因为我有同样的问题,并使用了其他答案作为参考,但我发现它们过于复杂。所以让我用另一种复杂的方式来回答:)
这是我得到的。我知道这比您需要的代码要多,但我认为在这里看到完整的画面很重要。先让我安排一下。剑道()有问题。多选。Name(“SomeName”)属性,如果您要多次使用它。“Name”不仅设置了html名称,还设置了id,而且您永远不希望两个id具有相同的标识符。因此,在我的代码中,我向MultiSelect添加了一个唯一的ID。属性以确保唯一的ID。我把多选择在每一行的人表。我展示这一点是为了确保您使用的是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);

除非

  • 您没有在C#中使用DataValueField正确设置MultiSelect
  • 您在页面上有多个具有完全相同id的MultiSelect,并且它阅读的是一个与您想象的不同的。
  • 你甚至没有值字段,只有一个文本列表。
deikduxw

deikduxw4#

var selected = $("#multi").data("kendoMultiSelect").value();
yws3nbqq

yws3nbqq5#

volvox给出的解决方案是可行的。
下面是jquery版本

var multiselect = $("#SelectRoles").data("kendoMultiSelect");
var selectedData= [];
var items = multiselect.value();
$.each(items ,function(i,v){
  selectedData.push(v);
});
hof1towb

hof1towb6#

如果要同时获取选定的文本和值:

$("#SelectRoles").width(300).kendoMultiSelect({
     dataSource: {
        transport: {
            read: pg + "Controller/Roles"
          }
        },
     dataTextField: "Label",
     dataValueField: "Code"
    });
    
    var multiselect = $("#SelectRoles").getKendoMultiSelect();
    var selectedData = [];
    var items = multiselect.dataItems();
    for (var itm in items) {
        selectedData.push(itm.Label, itm.Code);
    }

相关问题