如何在列表框中显示多个选定的项目
问题描述:
我有一个列表框,您可以在其中选择多个项目并将这些项目保存到数据库。这一切工作正常,但是当我重新回到列表框查看只有第一个被选中的项目,即使我已经选择3如何在列表框中显示多个选定的项目
列表框:
<asp:ListBox runat="server" SelectionMode="Multiple" ID="txtEdtContactDocuments"></asp:ListBox>
代码:
for (var i = 0; i < document.getElementById('<%= txtEdtContactDocuments.ClientID %>').length; i++) {
for (var x=0;x<result.Docs.length;x++) {
if (Number(document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].value) == Number(result.Docs[x].DocType)) {
document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].selected = "selected";
} else {
document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].selected = "";
document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].selected = false;
}
}
}
的循环正在寻找正确的,但它确实找到了3个项目,我选择,但他们都没有在列表中得到强调:
我也试过document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].selected = true;
但这改变了一切。只有第一个项目仍然被选中。
答
这是一个算法问题。假设result.Docs
集合中有多个项目,则覆盖您在for (var x=0;x<result.Docs.length;x++)
循环的早期迭代中可能设置的项目。
如果您在此行之后放置break;
语句,则您的算法应该可以正常工作:document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].selected = "selected";
。当找到适当的项目时,它将终止内部循环。
但是,我建议重构代码并彻底摆脱内部循环。例如,您可以用一个LINQ查询替换它。
注意:不需要使用jQuery或任何其他JS框架。你可以很容易地做到与香草JavaScript的任务:https://jsfiddle.net/hjybjz3e/
答
尝试使用jQuery来设置选定的选项。
替换
document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].selected = "selected";
随着:
$('#<%= txtEdtContactDocuments.ClientID %>').eq(i).attr("selected", "true");
.EQ()是一个jQuery函数使用[]表示法在特定的索引大致相同我们选择的对象。
谢谢你的工作 – user123456789