2017-05-04 142 views
0

我有一个列表框,您可以在其中选择多个项目并将这些项目保存到数据库。这一切工作正常,但是当我重新回到列表框查看只有第一个被选中的项目,即使我已经选择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个项目,我选择,但他们都没有在列表中得到强调:

enter image description here

我也试过document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].selected = true;但这改变了一切。只有第一个项目仍然被选中。

回答

2

这是一个算法问题。假设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/

+0

谢谢你的工作 – user123456789

-1

尝试使用jQuery来设置选定的选项。

替换

document.getElementById('<%= txtEdtContactDocuments.ClientID %>')[i].selected = "selected"; 

随着:

$('#<%= txtEdtContactDocuments.ClientID %>').eq(i).attr("selected", "true"); 

.EQ()是一个jQuery函数使用[]表示法在特定的索引大致相同我们选择的对象。

相关问题