使用 Javascript 测试选定的 asp 列表框项目

Testing a selected asp Listbox item with Javascript

ListBox1 有一个列表项:

<asp:ListItem Value="No.1">No.1</asp:listitem>

并且有一个测试标签

<asp:Label ID="lblLabel" runat="server" Text="Label1" ></asp:Label>

现在我正在尝试使用 Javascript (jQuery) 测试当列表框保留有 tab 或 enter 时是否选择了列表项 1 并且不起作用。 此 javascript (jQuery) 代码可能有什么问题?

$("#ListBox1").focusout(function () {
    if ($("#ListBox1").SelectedItem.Text === "No.1") {
        // tried also if ($("#ListBox1").val() === "No.1") { 
        $("#lblLabel").Text = $("#ListBox1").SelectedItem.Text;
    }
});

最大的问题是 ASP.Net 服务器端的表单控件 ID 在客户端呈现为完全不同的东西。你可以这样做:

$("#<%=ListBox1.ClientID%>").focusout(function() { ... });

在我看来,这变得非常丑陋非常快,所以我更喜欢使用 classes。您可以像这样定义控制标签:

<asp:Label ID="lblLabel" CssClass="obj_lblLabel" runat="server" Text="Label1" ></asp:Label>

这将允许您使用 class 选择器在客户端识别您的控件:

$(".obj_lblLabel").focusout(function() { ... });

您不一定需要 obj_ 前缀,但我个人用它来表示 class 未用于样式目的。

此外,jQuery有一个change()事件,比focusout()更适合使用。

最后,您应该避免主动 ASP.Net 表单开发。这是一个行业正在迅速摆脱的破碎范式。 ASP.Net MVC 更容易使用,甚至更好的是它可以合并到您现有的项目中。看这里:ASP.Net MVC alongside Web Forms

这解决了问题,jQuery 并使用了 focusout 事件,因此列表框仍然可以使用滚动键滚动。

$('#ListBox1').focusout(function () {
            var data = $(this).val();
            if (data == "No.1") {
                //alert(data);
                $('#myModal').modal('toggle');
            }
            $("#ListBox1").focus();
        });