2

我有一个 ASP.NET 列表框,并且在更改时我需要在(单个或多个)警报中显示(单个或多个)选定文本。警报的数量应等于所选项目的数量。我尝试了以下代码,其中我收到了一个额外的警报,显示 ListBox 中的第一项。我哪里做错了?

<asp:ListBox ID="ListBox1" runat="server" Width="100px"
    SelectionMode="Multiple">
    <asp:ListItem Selected="True" Value="1">White</asp:ListItem>
    <asp:ListItem Selected="False" Value="2"> Silver </asp:ListItem>
    <asp:ListItem Value="3"> Dark Gray </asp:ListItem>
    <asp:ListItem Value="4"> Khaki </asp:ListItem>
    <asp:ListItem Value="5"> Dark Khaki </asp:ListItem>
</asp:ListBox>

$(document).ready(function () {
    $("#ListBox1 ").change(function () {
        $("option").each(function () { 
            if (this.selected) {
                alert(this.text);
            }
        });
    });
});

请帮忙。

谢谢。

4

1 回答 1

1

我认为正在发生的事情是您的 asp 代码在 HTML 中呈现列表项:

...
<option value="1" selected="true">
<option value="2" selected="false">
...

由于属性“selected”在这两种情况下都存在,如果属性设置为 true 或 false,检查 this.selected 将返回 true,因为“selected”以任何一种方式都存在。

实现相同目标的更简单方法是替换它:

$("#ListBox1 ").change(function () {
    $("option").each(function () { 
        if (this.selected) {
            alert(this.text);
        }
    });
});

有了这个:

$('#ListBox1').find('option:selected').map(function () {
  alert.log($(this).text());
});
于 2013-03-07T02:41:56.937 回答