2017-05-04 10 views
0

複数のアイテムを選択できるリストボックスがあり、これをデータベースに保存します。すべてが正常に動作しますが、その私が選択したにも関わらず、最初のものだけが選択されている項目を表示するリストボックスに戻ったときに3複数の選択したアイテムをリストボックスに表示する方法

ListBoxコントロール:

<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の関数です。

関連する問題