2017-05-04 215 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函數使用[]表示法在特定的索引大致相同我們選擇的對象。

相關問題