ASP.NET/VB.NET:Dropdownlist SelectedIndexChanged未使用onchange=

ASP.NET/VB.NET: Dropdownlist SelectedIndexChanged not firing with onchange="javascript:return true;"

本文关键字:NET 未使用 onchange SelectedIndexChanged VB ASP Dropdownlist      更新时间:2023-09-26

我有以下标记:

<asp:DropDownList ID="dd1" AutoPostBack="true" runat="server">
    <asp:ListItem Value="1">1</asp:ListItem>
    <asp:ListItem Value="2">2</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="dd2" AutoPostBack="true" onchange="javascript:return true;" runat="server">
    <asp:ListItem Value="1">3</asp:ListItem>
    <asp:ListItem Value="2">4</asp:ListItem>
</asp:DropDownList>

连接到此:

Protected Sub changed1(sender As Object, e As EventArgs) Handles dd1.SelectedIndexChanged
End Sub
Protected Sub changed2(sender As Object, e As EventArgs) Handles dd2.SelectedIndexChanged
End Sub

当dd2的索引被更改时,你会期望它的处理程序被触发,对吧?事实并非如此。相反,它会被"排队",并在dd1的处理程序在其索引更改时激发后被激发。如果你把onchange="javascript:return true;"从dd2上取下来,它就会很好地发射。

有人知道这里发生了什么吗?

编辑:我的第一个答案是,在下拉列表中使用返回表达式与按钮的单击事件不一样,但我发誓我以前对下拉列表也这样做过。

更新:我可以通过在Javascript:中执行此操作来强制启动服务器事件

__doPostBack("<%=dd2.ClientID %>", '');

我不明白为什么我必须这样做,但它是有效的。然而,我仍然想用另一种方式,所以如果有人知道,请让我知道,这样我就可以把你标记为答案。

您根本不需要它。只需将AutoPostBack设置为true,如果需要转义验证,则将CausesValidation设置为false。

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" CausesValidation="false" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" />

出于某种原因,我认为可以通过在客户端的onchange事件上返回false来取消下拉列表的服务器事件,就像在按钮的onclick事件(例如onclick="javascript:return false;"(中一样。

我最终要做的是检查函数中的一个条件。如果是真的,它会触发这个:

__doPostBack("<%=dd2.ClientID%>",''(;

否则,它不会。

<asp:DropDownList ID="page_size" runat="server" **AutoPostBack="true"** OnSelectedIndexChanged="page_size_SelectedIndexChanged">
                            </asp:DropDownList>

添加Autopostback="true对我有好处。

__doPostBack("<%=dd2.ClientID %>", '');

这对我有效。

这是我的下拉菜单:

<asp:DropDownList ID="ddlbranchname" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlBranchChanged" 
onchange="return CheckDate();" CausesValidation="false" CssClass="dropdown">
</asp:DropDownList>

这是我的jquery函数:

function CheckDate() {
    var date = document.getElementById('<%= ucDateTimeStart.FindControl("txtDateTime").ClientID %>').value;
    if (date == '') {
        alert("Please select a valid date.");
        return false;
    }
    else {
        __doPostBack("<%=ddlbranchname.ClientID %>", '');
        return true;
    }
    return true;
}