【问题标题】:How to show multiple selected items in an ListBox如何在列表框中显示多个选定项
【发布时间】:2017-05-04 16:35:19
【问题描述】:

我有一个列表框,您可以在其中选择多个项目并将这些项目保存到数据库中。一切正常,但是当我返回 ListBox 查看项目时,仅选择了第一个项目,即使我选择了 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('&lt;%= txtEdtContactDocuments.ClientID %&gt;')[i].selected = true;,但这改变了一切。只有第一个项目仍然被选中。

【问题讨论】:

    标签: javascript c# jquery asp.net listbox


    【解决方案1】:

    这是一个算法问题。假设 result.Docs 集合中有多个项目,您将覆盖您在 for (var x=0;x&lt;result.Docs.length;x++) 循环的早期迭代中可能设置的内容。

    如果您将break; 语句放在此行之后,您的算法应该可以工作:document.getElementById('&lt;%= txtEdtContactDocuments.ClientID %&gt;')[i].selected = "selected";。当找到合适的项目时,它将终止内部循环。

    但是,我建议重构代码并完全摆脱内部循环。例如,您可以将其替换为 LINQ 查询。

    注意:不需要使用 jQuery 或任何其他 JS 框架。您可以使用 vanilla JavaScript 轻松完成任务:https://jsfiddle.net/hjybjz3e/

    【讨论】:

      【解决方案2】:

      尝试使用 jQuery 设置选中的选项。

      替换

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

      与:

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

      .eq() 是一个 jQuery 函数,用于在特定索引处选择对象,这与我们使用 [] 表示法非常相似。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-12
        • 2018-01-06
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多