我有以下标记:
<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" />
关于javascript - ASP.NET/VB.NET : Dropdownlist SelectedIndexChanged not firing with onchange ="javascript:return true;",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7918628/